一、weak_ptr出现的意义 上一节提到过shared_ptr,它会自动释放“不再需要使用的对象”的相应的资源,但是它不是万能的,在某些时候(比如说循环引用),它会显得力不从心,这就是weak_ptr出现的意义; 1.1 weak_ptr 使用特性 weak_ptr也是一个模板,只提供能接受一个s ...
分类:
编程语言 时间:
2019-11-03 18:12:11
阅读次数:
113
动态内存与智能指针 智能指针分为shared_ptr、unique_ptr、weak_ptr,他们负责自动释放所指向的对象,shared_ptr允许多个指针指向同一个对象,unique_ptr独占所指向的对象,weak_ptr是一种弱引用,指向shared_ptr所管理的对象,他们都定义在memor ...
分类:
其他好文 时间:
2019-10-19 19:08:57
阅读次数:
102
由于在c++中我们可以动态分配内存,但有时候我们会忘记用 delete或free释放内存,就会导致内存泄露。所以c++11提供了智能指针这种东西 本文参考了知乎某知乎友的 https://www.zhihu.com/people/mo-shan-zhe/activities 比如下面这两种情况 可能 ...
分类:
编程语言 时间:
2019-10-16 19:44:18
阅读次数:
99
1.9 再论shared_ptr 的线程安全 虽然我们借shared_ptr 来实现线程安全的对象释放,但是shared_ptr 本身不是100% 线程安全的。它的引用计数本身是安全且无锁的,但对象的读写则不是,因为shared_ptr 有两个数据成员,读写操作不能原子化。根据文档11,shared ...
分类:
编程语言 时间:
2019-10-08 20:31:03
阅读次数:
540
太长了 参考链接: 【1】https://www.jianshu.com/p/a462a35c9481 【2】https://blog.csdn.net/k346k346/article/details/81478223 【3】https://blog.csdn.net/flowing_wind/a ...
分类:
其他好文 时间:
2019-10-06 18:46:53
阅读次数:
84
一. make系列函数 (一)三个make函数 1. std::make_shared:用于创建shared_ptr。GCC编译器中,其内部是通过调用std::allocate_shared来实现的。 2. std::make_unique:C++14中加入标准库。 3. std::allocate ...
分类:
其他好文 时间:
2019-10-05 22:25:39
阅读次数:
129
一、简介 由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见。 用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法 ...
分类:
编程语言 时间:
2019-10-05 18:47:26
阅读次数:
89
一. weak_ptr的概况 (一)weak_ptr的创建 1. 直接初始化:weak_ptr<T> wp(sp); //其中sp为shared_ptr类型 2. 赋值: wp1 = sp; //其中sp为shared_ptr类型 wp2 = wp1; //其中wp1为weak_ptr类型 (二)常 ...
分类:
其他好文 时间:
2019-10-05 01:06:44
阅读次数:
136
一. shared_ptr的基本用法 (一)与unique_ptr的比较 比较 shared_ptr unique_ptr 备注 初始化 ①shared_ptr<T> sp; sp.reset(new T()); ②shared_ptr<T> sp(new T()); ③shared_ptr<T> ...
分类:
其他好文 时间:
2019-10-04 16:52:00
阅读次数:
164
一. unique_ptr的基本用法 (一)初始化方式 1. 直接初始化:unique<T> myPtr(new T); //ok。但不能通过隐式转换来构造,如unique<T> myPtr = new T()。因为unique_ptr构造函数被声明为explicit。 2. 移动构造:unique ...
分类:
其他好文 时间:
2019-10-03 12:58:41
阅读次数:
114