关于使用智能指针时指针的释放问题

绿茶盖儿 绿茶盖儿 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
今天看C++ Primer中的智能指针(421-424页)。
有个问题一直想不通,如下:
首先指针是从外部送入类的内部,若类在析构的时候,其智能指针的计数器为0,就会释放该指针的内存,
也就是说这个指针是在类的外部分配的内存,但却在类的内部释放。这不是很奇怪吗,不符合谁分配谁释放的原则啊。
比如下面这段代码。

int *ip = new int(42);
HasPtr p1(ip); //HasPtr是一个带有智能指针的类

用户为指针ip分配了内存,然后把ip送入HasPtr的对象p1, 当p1析构的时候,就会释放ip的内存。但是使用HasPtr类的用户未必知道ip的内存已经被释放了,所以他可能会这样写代码

int *ip = new int(42);
HasPtr p1(ip);
delete ip;

这不就导致ip被重复释放了吗?
还有一个问题,如果传入类中的地址不是new出来的,类内部却会释放该地址的内存,不就出错了吗?比如下面这段代码

int i = 42;
HasPtr p1(&i);

p1在析构的时候释放i的地址所指向的内存,不就出错了吗
...全文
评论 6
收藏 已收藏
分享
返回顶部
绿茶盖儿
C++ 语言 65,214 成员 250,514 内容