首页 > 代码库 > BOOST之scoped_ptr源码及与auto_ptr的区别
BOOST之scoped_ptr源码及与auto_ptr的区别
BOOST库里面给出了几种智能指针以用来完善标准C++给出的auto_ptr的不足。
首先我们先来看看第一种scoped_ptr从名字上便能看出来区域型的智能指针,是的,这种指针和auto_ptr非常相似,但是这种智能指针不能转让所有权。即一旦获取类对象的管理权便不能从其手中夺走它,是个铁公鸡.......
下面贴上源码:
template<class T> class scoped_ptr{ private: T* px; scoped_ptr(scoped_ptr const &); scoped_ptr & operator=(scoped_ptr const &); public: typedef T element_type; explicit scoped_ptr(T *p=0):px(p){} ~scoped_ptr(){delete px;} void reset(T *p=0){ delete px; px=p; } T &operator *()const{return *px;} T *operator->()const{return px;} T *get()const{return px;} void swap(scoped_ptr&b){ T *p = b.get(); b.reset(get()); px=p; } };简单测试代码:
#include"scoped_ptr.h" #include<iostream> using namespace std; int main() { scoped_ptr<string> sp(new string("text")); cout<<*sp<<endl; cout<<sp->size()<<endl; }
scoped_ptr类通过把拷贝构造函数和赋值操作定义为私有的来达到不转让所有权的目的。
参考资料:BOOST完全开发指南 罗剑锋著
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。