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; }
参考资料:BOOST完全开发指南 罗剑锋著
BOOST之scoped_ptr源码及与auto_ptr的区别,布布扣,bubuko.com
BOOST之scoped_ptr源码及与auto_ptr的区别
原文地址:http://blog.csdn.net/igiqoanw/article/details/38730825