博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++智能指针《二》 std::tr1::shared_ptr
阅读量:7027 次
发布时间:2019-06-28

本文共 980 字,大约阅读时间需要 3 分钟。

转载

看《effective c++》,作者一直强调用std::tr1::shared_ptr,比起auto_ptr好多了。

shared_ptr采用引用计数,多个指针可以指向同一个对象;auto_ptr就不能,只能运行一个指针指向一个对象:如果要指针赋值,那么原来的指针要放弃对该对象的所有权。

恩,以后都用shared_ptr。

shared_ptr在最新的c++11中,已经被列入了标准指针,而auto_ptr则出局了。

说了那么多,shared_ptr采用RAII技术,是防止内存泄露的神器。

按bnu_chenshuo的说法,他最后一次看见代码中的内存泄露还是04年他做实习生的时候。

而C++沉思录的作者AndrewKoenig也极力推荐使用标准库,不用指针。

看下面的程序,我new了一个对象,并没有在程序中使用delete,但是,运行程序,其构造函数仍然运行!这就是shared_ptr,如果要预防内存泄露,它就是最佳选择!

# include 
# include
using namespace std;class A {public: A() { cout << "construct A!!!" << endl; } ; ~A() { cout << "destruct A!!!" << endl; } ;};class B: public A {public: B() { cout << "construct B!!!" << endl; } ; ~B() { cout << "destruct B!!!" << endl; } ;};int main() {// B* ptrB0 = new B(); std::tr1::shared_ptr
ptrB1(new B);}

运行结果:

 

construct A!!!

construct B!!!

destruct B!!!

destruct A!!!

转载于:https://www.cnblogs.com/ztteng/p/3258120.html

你可能感兴趣的文章
Bitnami-Redmine外网访问phpmyadmin设置
查看>>
通读SDWebImage①--总体梳理、下载和缓存
查看>>
929. 独特的电子邮件地址
查看>>
docker 13 dockerfile的保留字指令
查看>>
(转)开放window是服务器端口——以8080为例
查看>>
开源的asp.net工作流程引擎。 http://ccflow.org
查看>>
C# 中的拓展方法,以StringBuilder加上IndexOf方法举例
查看>>
用半监督算法做文本分类
查看>>
【2802】SDUTOJ (并查集模板水题2)
查看>>
看书不挑出版社的都是山炮——评60家国内出版社
查看>>
关于消除超长的case列表的一个思路
查看>>
shell下root用户切换其他用户运行程序
查看>>
恢复Ext3下被删除的文件(转)
查看>>
Instagram 架构分析笔记(转)
查看>>
java http线程池
查看>>
java较全的面试题
查看>>
day3
查看>>
软件程序编码
查看>>
感觉好累
查看>>
使用ant制作hadoop1.1.2的eclipse插件(转载)
查看>>