智能指针之scoped_ptr
来源:互联网 发布:女生棒球服搭配 知乎 编辑:程序博客网 时间:2024/05/21 14:34
scoped_ptr是一个类似auto_ptr的智能指针,scoped_ptr可以保证new操作符在堆上创建的对象在任何时候都可以被正确的删除。
scoped_ptr的最大特点就是一旦scoped_ptr拥有了某个对象的所有权,就无法再次取回!
scoped_ptr的构造函数:
scoped_ptr(T *p=0):px(p){}//其接受T*类型的指针p,创建出对象,并在该对象内部保存指针参数p,此处p必须是一个new动态分配的结果,或者是一个空指针
scoped_ptr的析构函数:
~scoped_ptr(){ delete px;}//对象的生命周期结束后,析构函数调用delete自动销毁所保存的对象
scoped_ptr为了保证被其管理的指针的所有权不被转移,就将其拷贝构造和赋值函数设置为私有的:
private: T *px; scoped_ptr(scoped_ptr cosnt &); scoped_ptr& operator=(scoped_ptr const &);
scoped_ptr的成员函数reset():重置scoped_ptr,删除原来保存的指针,再保存新的指针,若新指针为空,则scoped_ptr将不持有任何指针:
void reset(T *p = 0){ T(p).swap(*this);}void swap(scoped_ptr &b) //交换两个scoped_ptr保存的指针{ _T *tmp = b.px; b.px = px; px = tmp;}
scoped_ptr不支持比较操作,不能判断两个指针的相等或不相等,因为其operator== 和 operator!= 操作被声明为私有的:
private: void operator==(scoped_ptr const &)const; void operator!=(scoped_ptr const &)const;
scoped_ptr的成员函数get():得到scoped_ptr内部保存的指针,不可对该指针进行delete操作,否则会在scoped_ptr析构时会对已经删除的指针再进行删除操作:
T *get()const{ return px;}
注意:
scoped_ptr不再需要delete操作scoped_ptr会自动释放资源
以下是我对scoped_ptr的测试:
#include<iostream>#include<memory>#include<boost/smart_ptr.hpp>using namespace std;using namespace boost;//scoped_ptr不需要delete操作,因其会自动释放资源//scoped_ptr不能进行拷贝构造,所以不能执行scoped_ptr<int> ps = p;(错误)int main(){ scoped_ptr<int> p1; int *p = new int(10); scoped_ptr<int> ps(p); cout<<*ps<<endl; cout<<*p<<endl; *ps = 20; cout<<*ps<<endl; //p1 = ps; //scoped_ptr不支持赋值和拷贝构造,因为其是私有操作 int *q = new int(30); ps.reset(q); //重置 cout<<*ps<<endl; int *m = new int(40); auto_ptr<int> ps1(m); scoped_ptr<int> ps2(ps1); cout<<*ps2<<endl; //cout<<*ps1<<endl; //其拥有权已被转移至scoped_ptr的ps2,该指针已经指向空 ps1.reset(new int(50)); cout<<*ps1<<endl; return 0;}
1 0
- 智能指针之 scoped_ptr
- 智能指针之scoped_ptr
- 智能指针之scoped_ptr
- Boost智能指针之scoped_ptr
- 智能指针之scoped_ptr源码剖析
- 智能指针(三)之scoped_ptr
- 智能指针 scoped_ptr
- 智能指针scoped_ptr
- 智能指针 scoped_ptr
- 关于scoped_ptr智能指针
- scoped_ptr智能指针(二)
- 智能指针boost::scoped_ptr
- Boost智能指针:scoped_ptr
- 智能指针(二):scoped_ptr
- boost::scoped_ptr智能指针
- Boost智能指针—scoped_ptr
- C++ boost智能指针scoped_ptr
- boost智能指针系列:scoped_ptr
- Android视频播放器中的播放与暂停
- 欢迎使用CSDN-markdown编辑器
- hdu 2523 水
- linux mrtg cacti nagios zabbix对比
- Java实现-高效排序算法之Shell排序
- 智能指针之scoped_ptr
- C++实验5-数字串
- C++语言中的多态
- Java设计模式(九) 桥接模式
- SOA笔记
- 快速排序——一步一步算法篇
- bp神经网络及matlab实现
- 为什么数据库表之间要用物理主外键
- 第7周 C语言程序设计(新2版) 例题1.9 字符数组(打印最长输入行)