16.2 智能指针模板类
为什么需要智能指针

智能指针是行为类似于指针的类对象,可以解决出现异常时后续delete语句不被执行的问题。
指针是本地变量,在函数终止时本地变量都将从栈内存中被删除,指针本身占据的内存将被释放,但其指向的内存不会。而对象在过期时,可以由类中原本设定的析构函数删除其指向的内存。
智能指针的存活期是代码块,在程序执行完代码块后智能指针就会销毁。
使用智能指针前
void remodel(std::string & str)
{
std::string * ps=new std::string(str);
···
if(weird_thing())
throw exception();
str=*pr;
delete ps;
return;
}
使用auto_ptr
修改该函数:
#include<memory>
void remodel(std::string & str)
{
std::auto_ptr<std::string> ps(new std::string(str));
···
if(weird_thing())
throw exception();
str=*pr;
//不需要delete ps;