C++没有提供垃圾回收机制,C++11提供的智能指针能够在一定程度上解决C++内存泄漏的问题。C++11提供了共享智能指针(shared_ptr),独占智能指针(unique_ptr),弱引用指针指针(weak_ptr),使用时需要引用智能指针本质上存储动态分配(堆)对象的指正的模板类,用于对堆对象...
分类:
编程语言 时间:
2015-08-26 15:20:36
阅读次数:
338
我们知道auto_ptr通过复制构造或者通过=赋值后,原来的auto_ptr对象就报废了.所有权转移到新的对象中去了.而通过shared_ptr可以让多个智能指针对象同时拥有某一块内存的访问权.但假如我们不希望多个内存块被多个智能指针对象共享,同时又不会像auto_ptr那样不知不觉的就让原来的au...
分类:
其他好文 时间:
2015-08-17 15:24:40
阅读次数:
123
前面讲到auto_ptr有个很大的缺陷就是所有权的转移,就是一个对象的内存块只能被一个智能指针对象所拥有.但我们有些时候希望共用那个内存块.于是C++ 11标准中有了shared_ptr这样的智能指针,顾名思义,有个shared表明共享嘛.所以shared_ptr类型的智能指针可以做为STL容器的元...
分类:
其他好文 时间:
2015-08-17 15:20:34
阅读次数:
114
智能指针概述:
智能指针用来管理动态对象。其行为类似于常规指针,重要的区别是:它负责自动释放所指向的对象。
C++ 11标准库提供两种智能指针:shared_ptr、unique_ptr
区别是:shared_ptr允许多个指针指向同一个对象;unique_ptr则独占所指向的对象。
另外,还有一种weak_ptr的伴随类,它是一种弱引用,指向shared_ptr所管理的对象。
...
分类:
编程语言 时间:
2015-08-10 12:07:49
阅读次数:
232
借用LeetCode 208. Implement Trie (Prefix Tree)中设计的字典树,特判查询字符为.时的情况即可。
注意:
成员变量的初始化应放在构造函数的initializing list而不是body中,使成员变量只被初始化一次,没有被再次赋值;
使用shared_ptr代替裸指针来管理内存。
代码:
class TrieNode
{
public:
T...
分类:
其他好文 时间:
2015-08-10 12:06:32
阅读次数:
117
1.抛弃临时对象,让所有的智能指针都有名字.2.类向外传递 this 的 shared_ptr 让类继承 enable_shared_from_this. 然后返回 shared_from_this();3. 例子有时间再补上.
分类:
编程语言 时间:
2015-08-09 22:05:31
阅读次数:
158
条款1:不要把一个原生指针给多个shared_ptr管理int* ptr = new int;shared_ptr p1(ptr);shared_ptr p2(ptr); //logic errorptr对象被删除了2次这种问题比喻成“二龙治水”,在原生指针中也同样可能发生。条款2:不要把this指...
分类:
编程语言 时间:
2015-08-09 20:18:13
阅读次数:
237
如果在程序中使用new从堆(自由存储区)分配内存,等到不需要时, 应使用delete将其释放。c++引入了智能指针auto_ptr, 以帮助自动完成这个过程。 c++11摒弃了auto_ptr,并新增了三种智能指针:unique_ptr, shared_ptr, weak_ptr。
一. auto_ptr, unique_ptr , shared_ptr
头文件: #include...
分类:
编程语言 时间:
2015-07-30 00:46:46
阅读次数:
271
关于shared_from_this 查找的资料:1. TcpConnection用到了enable_shared_from_this这个基类,这个基类提供了一个shared_from_this()公用方法可以让子类内部获取到shared_ptr的对象,用来用在类实现过程中需要传递自身指针的地方。有...
分类:
编程语言 时间:
2015-07-27 18:31:27
阅读次数:
161
需要注意:auto_ptr 类可以用于管理由 new 分配的单个对象,但是无法管理动态分配的数组(我们通常不会使用数组,而是使用 vector 代替数组)。auto_ptr 在拷贝和赋值的时候有不寻常的行为,因此 auto_ptrs 不能被保存在 stl 的容器中。当 auto_ptr 离开了自己的...
分类:
其他好文 时间:
2015-07-23 23:35:39
阅读次数:
211