标签: it | 分类: C/Cplusplus |
| |
| 当离开作用域能够自动释放的指针。因为它是不传递所有权的。事实上它明确禁止任何传递所有权的企图,用于确保指针任何时候只有一个拥有者。 |
| |
| 一个弱指针,帮助share_ptr避免循环引用 |
| 和shared_ptr类似,用来处理数组的。 |
| 和scoped_ptr类似,也是用来处理数组的。 |
使用普通指针 | 使用scoped_ptr |
void { } | #include void { } |
使用scope_ptr指针就能够在函数结束的时候自动销毁它,但对于函数外创建的指针就无效了。
优点:使用scoped_ptr指针能偶帮助我们能处理那些容易忘记释放的对象,也因此在调试模式下如果使用空指针,就会出现一个断言。
优点 | 自动释放本地对象和成员变量。 |
缺点 | 在STL容器里,多个指针操作一个对象的时候需要注意。 |
性能 | 使用scoped_ptr |
其记录有多少个引用指针指向同一个对象,弱国最后一个引用指针被销毁的时候,那么就销毁对象本身。
shared_ptr就是Boost中普通的引用指针计数器,它表示可以有多个指针指向同一个对象。
void { } |
然后再给这个实例分配第二个指针,现在两个指针同时访问同一个数据
再将第一个指针制空,那么这个实例并没有被销毁,当mySample2退出它的作用域之外,CSample这个实例才被销毁。
4.重要特点:
- shared_ptr<T>作用在一个未知类型上
当声明或定义一个shared_ptr<T>,T可能是一个未知的类型。例如你仅仅在前面声明了class T,但并没有定义class T。当我们要释放这个指针的时候我们需要知道这个T具体是一个声明类型。
- shared_ptr<T>作用在任意类型上
在这里本质上不需要制定T的类型(如从一个基类继承下来的)
- shared_ptr<T>支持自己定义释放对象的操作
如果你的类中自己写了释放方法,也可以使用。具体参照Boost文档。
- 强制转换
如果你定义了一个U*能够强制转换到T*(因为T是U的基类),那么shared_ptr<U>也能够强制转换到shared_ptr<T>。
- shared_ptr
是线程安全的
(这种设计的选择超过它的优点,在多线程情况下是非常必要的)
- 已经作为一种惯例,用在很多平台上,被证明和认同的。