1. 开篇
C++里面的四个智能指针:auto_ptr、unique_ptr、shared_ptr、weak_ptr,其中后三个是C++11支持,而这个auto_ptr已经被C++11弃用。但auto_ptr还是有必要学习的。C++的auto_ptr所做的事情,就是动态分配对象以及当对象不在需要时自动执行清理。
2. 构造函数与析构函数
auto_ptr在构造时获取对某个对象的所有权(ownership),在析构时释放该对象。我们可以这样使用auto_ptr来提高代码安全性:
int*p = new int(0);
auto_ptr<int> ap(p);
从此我们不必关心应该何时释放p,也不用担心发生异常会有内存泄漏。
注意:
(1) 因为auto_ptr析构的时候肯定会删除他所拥有的那个对象,所以我们就要注意了,一个萝卜一个坑,两个auto_ptr不能同时拥有同一个对象。像这样:
int * p = new int(e);
auto_ptr<int> ap1(p);
auto_ptr<int> ap2(p)