智能指针
来源:互联网 发布:php好就业吗 编辑:程序博客网 时间:2024/05/11 05:53
注意:智能指针不是指针,而是模板!
auto_ptr 实现方式:权限转移 坚决不建议使用此模板
scoped_ptr 实现方式:防拷贝,防赋值(将拷贝构造函数和operator=设为私有)
shared_ptr 实现方式:引用计数 但是存在循环引用的问题,可能会造成内存泄漏
解决方案:
1.当剩下最后一个引用的时候,手动释放该对象
2.当对象a的生存周期超过b的时候,将b改为使用一个普通指针指向a
3.配合weak_ptr使用 ,weak_ptr可以生成一个shared_ptr的一个对象,但是weak_ptr是弱引用的,而且它能检测对象是否已经释放,
访问对象时必须通过lock访问,对象的生命周期交给shared_ptr
weak_ptr 的简洁声明如下
namespaceboost {
template<typenameT>classweak_ptr {
public:
template<typenameY>
weak_ptr(constshared_ptr<Y>& r);
weak_ptr(constweak_ptr& r);
~weak_ptr();
T* get()const;
boolexpired() const; //检测对象是否已经被释放
shared_ptr<T> lock()const;//用于获取强引用指针
};
}
阅读全文
0 0
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- Oracle DB 使用单行函数定制输出
- 89. Gray Code [leetcode]
- 16:9
- 【怎样写代码】复杂对象的组装与创建 -- 建造者模式(一):问题案例
- Oracle出现不是group by 表达式的原因
- 智能指针
- 线程中更改全局变量的问题
- python启动失败 error: [Errno 98] Address already in use
- CCNP ospf协议
- Windows QT工程编译出错
- css强制换行
- kali下栈溢出实验和一些tips
- STM32 USB 上位机程序实现
- day26之模拟实现memcpy和memmove函数