智能指针不需要手动释放对应内存,那么智能指针使用完毕之后也需要手动置空吗?

XDmonkey 2016-04-10 03:38:32
智能指针不需要手动释放对应内存,那么智能指针使用完毕之后也需要手动置空吗?还是封装好的方法中有置空这一项?想知道最后是如何避免成为野指针的?
...全文
2488 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-04-11
  • 打赏
  • 举报
回复
引用 2 楼 qq423399099 的回复:
不用手动置空,不然不觉得挺麻烦的么? 同时,慎用智能指针: 在没有垃圾回收体系的支撑下,能少用就少用,只用在那些实在没有其它更好解的场合。 智能指针会引人大量新的问题,并且更加难解决。 智能指针是一种语法糖。语法糖越甜,编译调试查错越苦!
于我心有戚戚焉。
lm_whales 2016-04-10
  • 打赏
  • 举报
回复
智能指针使用完毕,不需要做任何事情 他本来就是封装的指针, 其实 vector, string 也有点智能指针的意思。 只是智能指针很多时候是主动new 的。 并且智能指针,是当作指针使用的,通常重载了 *,->等运算符 不像 vector, string 他们并没有 载了 *,->等运算符 不过,这些容器类,的Iterator 类重载了 * 有点像智能指针
knifekaka 2016-04-10
  • 打赏
  • 举报
回复
比如C++的auto_ptr智能指针,C++不会做这么无聊的事情,析构函数调用delete就没有下文了,不会置空。 唯一一种情况是你后面还需要对指针进行非null判断,所以你需要手动设置成null,但既然你将指针交给智能指针管理,就不应该再去单独操作指针了,这样的程序管理起来非常麻烦的(小小建议),也不符合C++对象思想。
XDmonkey 2016-04-10
  • 打赏
  • 举报
回复
引用 4 楼 u013209493 的回复:
智能指针是一个类对象,生存周期结束时会调用析构函数,设计好的智能指针是不需要手动调用释放的,例如release,一般析构函数做一些判断后会调用它,但不排除可以手动调用,但不会影响析构函数,因为它做了非null之类的判断。
释放那个我能理解它,那么也就是说智能指针对应模板类的析构函数中已经做了如果非null,则会置为null的判断是吗
knifekaka 2016-04-10
  • 打赏
  • 举报
回复
智能指针是一个类对象,生存周期结束时会调用析构函数,设计好的智能指针是不需要手动调用释放的,例如release,一般析构函数做一些判断后会调用它,但不排除可以手动调用,但不会影响析构函数,因为它做了非null之类的判断。
小灸舞 2016-04-10
  • 打赏
  • 举报
回复
不用手动置空,不然不觉得挺麻烦的么? 同时,慎用智能指针: 在没有垃圾回收体系的支撑下,能少用就少用,只用在那些实在没有其它更好解的场合。 智能指针会引人大量新的问题,并且更加难解决。 智能指针是一种语法糖。语法糖越甜,编译调试查错越苦!
yshuise 2016-04-10
  • 打赏
  • 举报
回复
智能指针如果是new,那么就要delete。 如果是栈对象就不需要手动释放,是自然释放的。 一般情况下都是使用的栈对象。
szn_409 2016-04-10
  • 打赏
  • 举报
回复
1.不需要手动置空,其内存会自动释放 2.你想置空也行 直接 p = nullptr;就好了

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧