码迷,mamicode.com
首页 > 其他好文 > 详细

智能指针

时间:2018-03-21 14:03:51      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:临时对象   微软   ima   unique   避免   退出   右值   bsp   strong   

技术分享图片

上面这个例子就是会出现函数结束了 却忘记了释放内存 产生了内存泄漏

怎么避免这种问题呢 我们就利用函数在终止时 会对栈上的对象进行析构这个特点

产生了智能指针的概念

我们用智能指针来管理分配的资源 当我们函数退出时 智能指针执行自己的析构函数 释放它管理的资源

技术分享图片

模板auto_ptr是C++98提供的解决方案,C+11已将将其摒弃,并提供了另外两种解决方案。然而,虽然auto_ptr被摒弃,但它已使用了好多年:同时,如果您的编译器不支持其他两种解决力案,auto_ptr将是唯一的选择。

auto_ptr有什么问题呢

技术分享图片

原来的智能指针已经是NULL 不能对ps1进行操作了 所以摒弃auto_ptr的原因是

避免潜在的内存崩溃问题

为了解决这个问题 我们使用 unique_ptr

unique_ptr智能指针之间的 赋值和拷贝构造 都是非法的 eg: ps2 = ps1

 

但是对临时对象的操作确实合法的 eg: ps2 = demo()

程序试图将一个 unique_ptr 赋值给另一个时,如果源 unique_ptr 是个临时右值,编译器允许这么做;如果源 unique_ptr 将存在一段时间,编译器将禁止这么做

 

技术分享图片

 

智能指针的选择

需要多个指针指向同一对象的时候 选择shared_ptr

如果不需要时 选择 unique_ptr 也可以使用 auto_ptr

如果没有 unique_ptr 可以使用boost库里的 scoped_ptr

智能指针

标签:临时对象   微软   ima   unique   避免   退出   右值   bsp   strong   

原文地址:https://www.cnblogs.com/hanhuihanhui/p/8616058.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!