unique_ptr: 独占指针, 相当于以前的auto_ptr, 只能移动而不可复制(复制操作默认是移动语义的), 没有其它成员变量, 可以用make_unique来初始化数组 shared_ptr: 有引用计数的指针, 因此可以复制 weak_ptr: 不参与引用计数, 与shared_ptr一起使用 14 在资源类中小心Copying行为 这一条是当你不得不自己建立资源...
在shared_ptr内可以利用get函数显式获取资源 std::shared_ptr<Cat> cat; cat.get()//显式获取资源 2.在自己实现类中则是 FontHandlegetFont()//这是C语言的API函数class Font{ public: FontHandleget()const{returnf;} private: FontHandle f; } 隐式转换: FontHandlegetFont()//这是C语言的API函数cla...
Widget*create_Widget(){...} 如果只是返回一个裸指针,那么删除指针释放资源的责任就落在用户身上,而这常常会带来问题;如果把返回值改为shared_ptr,那么自动释放资源。 shared_ptr还有个性质是会使用每个指针专属的删除器。如果对象在一个DLL中被new创建而在另一个DLL内被delete,会引起运行期错误;而shared_ptr使用...
1. tr1::shared_ptr和auto_ptr都提供一个get成员函数,用来执行显式转换,也就是它会返回智能指针内部的原始指针(的复件): 2. 就像(几乎)所以智能指针一样,tr1::shared_ptr和auto_ptr也重载了指针取值操作符(operator-> 和 operator*),他们允许隐式转换至底部原始指针。 如: classInvestment {public:boolisTax...
shared_ptr相对来说更好一些,会通过引用计数的方式决定何时释放资源,它是一个 reference-counting smart pointer (RCSP),和垃圾回收的机制很像。 但是auto_ptr和shared_ptr有同样的缺点,就是释放资源使用的是delete而不是delete [],这导致它们无法释放数组资源。比如下面的写法是有问题的: ...
tr1::shared_ptr支持定制型删除器,这也可防范“Cross-DLL problem”,可被用来自动解除互斥锁等 19. Treat class design as type design 在你想设计一个优秀的class之前,你必须首先思考和回答以下问题 新type的对象应该如何被创建和销毁? 这将影响对象的构造函数、析构函数、内存分配函数、内存释放函数 对象的初始...
简介:智能指针的行为像是指针,但是没有提供加的功能。例如,Item 13中解释了如何使用标准auto_ptr和tr1::shared_ptr指针在正确的时间自动删除堆上的资源。STL容器中的迭代器基本上都是智能指针:当然,你不能通过使用“++”来将链表中的指向一个节点的内建指针移到下一个节点上去,但是list::iterator可以这么做。
Effective Modern C++ 之 shared_ptr 天空**y’上传45KB文件格式pdfar 我们前面介绍了unique_ptr智能指针,它对它所指向的对象资源具有专属所有权。这个就直接导致unique_ptr是无法进行复制操作的。有没有一种智能指针对象资源不具有专属所有权,也就是它可以进行复制操作。当然有的。那就是shared_ptr智能指针。shared...
以下将阐述智能指针的关键想法,同时常见两个RAII类是shared_ptr与unique_ptr(修正后) 原因:资源放进对象内,依赖C++的“析构函数自动调用机制”确保资源释放。 智能指针 想法一、获得资源后立即放入管理对象。RAII(Resource Acquisition Is Initialization),获取一笔资源后于同一语句内以它初始化某个管理对象。
4,shared_ptr支持定制型删除器。这能够防范DLL问题,能够用来自己主动解除相互排斥锁。 条款19:设计class宛如设计type 怎样设计你的类: 1,新type的对象应该怎样创建和销毁? 影响到的设计函数:构造函数、析构函数以有内存分配函数和释放函数(operator new,operator new[],operator delete,operator delete [])。