C++ boost scoped_ptr
来源:互联网 发布:谷歌搜索算法 编辑:程序博客网 时间:2024/05/29 13:12
scoped_ptr摘要如下:
template<class T>
class scoped_ptr{
private:
T* px; //原始指针
scoped_ptr(scoped_ptr const &); //拷贝构造函数私有化
scoped_ptr & operator=(scoped_ptr const &); //=运算符重载私有化
void operator==(scoped_ptr const&) const; //==运算符重载
void operator!=(scoped_ptr const&) const; //!=运算符重载
public:
explicit scoped_ptr(T* p = 0); //显式构造函数
~scoped_ptr();
void reset(T* p = 0); //重置智能指针
T& operator*() const; //*操作符重载
T* operator->() const;
T* get() const; //获得原始指针
explicit operator bool() const; //显示bool值转型
void swap(scoped_ptr & b); //交换指针
};
template<class T>inline
bool operator==(scoped_ptr<T> const & p, boost::detail::spnullptr_t);//与空指针作比较
scoped_ptr 用法:
成员函数reset()的功能室重置scoped_ptr:他删除原来保存的指针,在保存新的指针值p,如果p为空指针,那scoped_ptr将不持有任何指针。一般情况下,reset()不应该被调用,因为它违背了scoped_ptr的本意-资源应该一直有scoped_ptr自己自动管理
scoped_ptr提供了一个可以在bool语境中自动转换成bool值的情况,例如在if ,用来判断scoped_ptr是否持有一个有效的指针(即非空),例如:if(!sp) //如果sp持有的指针为空
使用new表达式结果构造scoped_ptr对象
scoped_ptr<string> sp(new string("test"));
assert(sp);
assert(sp != nullptr);
assert(sp != 0)
if(!sp) //如果sp持有的指针为空
cout<<"sp is invalid"<<endl;
cout<<*sp<<endl;
cout<<sp->c_str()<<endl;
cout<<sp->size()<<endl;
scoped_ptr把拷贝构造函数和复制函数都声明为私有的,不允许拷贝或赋值,拒绝了指针所有权的转让,只能在scoped_ptr被生命的作用域内使用,其他任何人都没有权限访问被管理的指针,从而保证了指针的绝对安全(有点一棍子打死的感觉,太不方便了,应用的范围小,但是绝对安全),由此引出了另外一个结论:如果一个类持有scoped_ptr成员变量,那么它也是不可拷贝和赋值的。例如:
class prt_owned final
{
scoped_ptr<int> m_ptr;
};
prt_owned p;
ptr_owned p2(p); //编译错误,不能拷贝构造
注意
1、scoped_ptr除了*和->以外没有定义其他操作符,因此不能对scoped_ptr 进行++、--等指针运算
2、如果scoped_ptr保存的是空指针,那么operator*()和operator->()这两个操作的行为未定义
- C++:Boost智能指针——scoped_ptr
- boost::scoped_ptr
- boost::scoped_ptr()
- boost::scoped_ptr
- boost::scoped_ptr
- C/C++: std::auto_ptr 与 boost:: scoped_ptr 区别
- 【c++】模拟实现boost库里的scoped_ptr
- boost 之 scoped_ptr
- boost之scoped_ptr
- Boost,scoped_ptr中的unspecified_bool_type
- boost::scoped_ptr 源码分析
- boost库之scoped_ptr
- boost学习之-scoped_ptr
- Boost.smart_ptr.scoped_ptr--1
- boost学习scoped_ptr,shared_ptr
- 【boost::smatr_ptr】scoped_ptr
- 智能指针boost::scoped_ptr
- boost:: scoped_ptr源码剖析
- [Dream Team邀请赛]----Best 终极装备
- Heap 和 priority queue
- laravel框架mvc
- 自动化测试框架搭建流程----2016-11-14
- C++ 中main(char ** argv)的参数传递
- C++ boost scoped_ptr
- ViewPager 详解(二)---详解四大函数
- 随机游走
- 简单易学的机器学习算法——基于密度的聚类算法DBSCAN
- POJ 2017 Speed Limit G++
- NOIP比赛啦。
- java中static之静态方法
- 十进制转二进制输出
- git-note