很多人都误以为智能指针是一个指针,其实不然,智能指针不是指针,智能指针是一个模板,由智能指针实例化出来的的对象具有和常规指针相似的行为,但是他能够自动的释放所指向的对象,所以我们称之为智能指针。如果我们用普通指针来创建一个指向某个对象的指针,那么我们最后必须要手动释放这块空间,而智能指针它是一个类,它释放空间是通过析构函数完成的,正是由于有了这一层封装机制,所以智能指针才能够管理一个对象的生命周期。(定义一个类来封装资源的分配和释放,在构造函数完成资源的分配和初始化,在析构函数完成资源的清理,可以保证资源的正确初始化和释放。这样的方法称为RAII)
起初在C++标准库里面是没有智能指针的,直到C++11中才加入了shared_ptr和unique_ptr,weak_ptr。最早的智能指针在Boost库里面,Boost是为C++标准库提供扩展的一些C++程序的总称,由Boost社区组织开发维护。
1、auto_ptr
auto_ptr在STL中早就存在了,auto_ptr是通过权限转移的方式来防止值拷贝所带来问题,所谓权限转移就是说开辟的动态内存任何时刻只能由一个指针指向。
下面通过实现自己的AutoPtr来剖析一下auto_ptr。现在已经不用aotu_ptr了,常用的是scoped_ptr和shared_ptr.
<span style="font-size:14px;">template<typename T>
class AutoPtr //AutoPtr是一个类模板,不是指针类型
{
public:
AutoPtr(T* ptr=0);
AutoPtr(AutoPtr<T>& ap);
AutoPtr<T>& operator=(AutoPtr<T>& ap);
T*