智能指针 shared_ptr 和 new结合使用 用make_shared函数初始化shared_ptr是最推荐的,但有的时候还是需要用new关键字来初始化shared_ptr. 一,先来个表格,唠唠new和shared_ptr 操作 功能描述 shared_ptr<T> p(q) 智能指针p管理内置指针q所指向的对象:q必须指向new分配的内存,且能够转换为T*. shared_ptr<T> p(u) p从unique_ptr u那里接管了原来u所指向对象的所有权,并将u置为空…
智能指针 shared_ptr 使用 上一篇智能指针是啥玩意,介绍了什么是智能指针. 这一篇简单说说如何使用智能指针. 一,智能指针分3类:今天只唠唠shared_ptr shared_ptr unique_ptr weak_ptr 二,下表是shared_ptr和unique_ptr都支持的操作 操作 功能描述 shared_ptr<T> sp 空智能指针,可以指向类型为T的对象 unique_ptr<T> up 空智能指针,可以指向类型为T的对象 p 将p用作一个条件判断,如果…
shared_ptr 这里有一个你在标准库中找不到的—引用数智能指针.大部分人都应当有过使用智能指针的经历,并且已经有很多关于引用数的文章.最重要的一个细节是引用数是如何被执行的—插入,意思是说你将引用计数的功能添加给类,或者是非插入,意思是说你不这样做.Boost shared_ptr是非插入类型的,这个实现使用一个从堆中分配来的引用计数器.关于提供参数化策略使得对任何情况都极为适合的讨论很多了,但是最终讨论的结果是决定反对聚焦于可用性.可是不要指望讨论的结果能够结束. shared_ptr完…
目录一. 引言二. 代码实现 2.1 模拟实现shared_ptr2.2 测试用例三. 潜在问题分析 你可能还需要了解模拟实现C++标准库中的auto_ptr一. 引言与auto_ptr大同小异,shared_ptr也是一个类.可以实现多个指针指向同一个对象(引用计数).发生拷贝的话都指向相同的内存.        每使用一次,内部引用计数加1:        每析构一次,内部引用计数减1,:        引用计数减为0时,自动释放原生指针所指向的内存.二. 代码实现 2.1 模拟实现shar…
为了解决C++内存泄漏的问题,C++11引入了智能指针(Smart Pointer). 智能指针的原理是,接受一个申请好的内存地址,构造一个保存在栈上的智能指针对象,当程序退出栈的作用域范围后,由于栈上的变量自动被销毁,智能指针内部保存的内存也就被释放掉了(除非将智能指针保存起来). C++11提供了三种智能指针:std::shared_ptr, std::unique_ptr, std::weak_ptr,使用时需添加头文件<memory>. shared_ptr使用引用计数,每一个shar…
近期正在进行<Effective C++>的第二遍阅读,书里面多个条款涉及到了shared_ptr智能指针,介绍的太分散,学习起来麻烦.写篇blog整理一下. LinJM   @HQU shared_ptr是一个智能指针.在C++ 11颁布之前,它包括在TR1(Technical Report 1)其中,如今囊括在C++11的标准库中. 智能指针 智能指针(Smart pointers)是存储"指向动态分配(在堆上)的对象的指针"的对象.也就是说.智能指针事实上是个对象.只…
// 智能指针会自动释放所指向的对象. // shared_ptr的应用场景是:程序需要在多个对象间共享数据 /* 先从应用场景入手吧,说矿工A发现了一个金矿. * 然后矿工A喊来了矿工B,一起开采,不久后矿工A劳累过度死了. * 矿工B继续开采着矿工A发现的金矿. * 但是矿工B不久后得了尘肺病. * 这时候如果矿工B喊来了矿工C,那矿工C就继续开采这个金矿, * 如果矿工B至死都没有喊anyone,那么这个金矿不再被任何人发现. * * 我们来说说实现 * 每个矿工new一个对象,金矿new…
enable_shared_from_this是一个模板类,定义于头文件<memory>,其原型为: template< class T > class enable_shared_from_this;       std::enable_shared_from_this 能让一个对象(假设其名为 t ,且已被一个 std::shared_ptr 对象 pt 管理)安全地生成其他额外的 std::shared_ptr 实例(假设名为 pt1, pt2, ... ) ,它们与 pt…
今天晚上去旁听了C++高级编程的课,其中提到智能指针.第一反映还以为是auto_ptr呢,一听才知道是share_ptr这个.哦,原来是C++11特性.大致的原因是auto_ptr有一点缺陷,而share_ptr比较安全.好吧,那就这个了. 先写一个简单的代码感受一下 #include <iostream> #include <tr1/memory> using namespace std; using std::tr1::shared_ptr; int main() { { sh…
智能指针的出现是为了能够更加方便的解决动态内存的管理问题.注:曾经记得有本书上说可以通过vector来实现动态分配的内存的自动管理,但是经过试验,在gcc4.8.5下是不行的.这个是容易理解的,vector是个模板,它不能辨别传入的数据类型是否是指针,从而也不能进行自动的释放内存操作.如果对非new出的对象进行delete操作,反而还会引起一些不必要的问题. C++11标准库为了能够使程序员能够更安全的使用动态内存,提供了两种智能指针类型来管理动态对象. shared_ptr类 智能指针也是模板…