《More Effective C++》条款28中这样写道:
所谓smart pointers,是“看起来、用起来、感觉起来都像内建指针,但提供更多机能”的一种对象。
智能指针是行为类似于指针的类的对象。
为什么需要智能指针呢?
首先看如下代码:
void remodel(std::string & str)
{
std::string *ps = new std::string(str);
...
str = ps;
return;
}
聪明的你已经发现了问题,上诉代码会造成内存泄露。所以需要在return之前加入代码:
delete ps;
但是有经验的工程师都知道:凡涉及“别忘了”的解决方法,很少是最佳的。
即使你记住了全部,看看下面的变体:
void remodel(std::string & str)
{
std::string *ps = new std::string(str);
...
if(..)
throw exception();
str = ps;
delete ps;
return;
}
当异常发生时,delete不会被执行,同样会内存泄露。
是时候智能指针出场了,**aoto_ptr、shared_ptr、unique_ptr。
aoto_ptr是C++98中提供的,C++11已经将其摒弃了。**
使用智能指针
可以将new获得的地址复制给智能指针。当智能指针过期时,其析构函数将使用delete来释放内存。
无需记住稍后释放这些内存,在智能指针过期时,这些内存将自动被释放。
首先必须包含头文件
其次:
aoto_ptr<double>pd(new double);
auto_ptr<string>ps(new string);
unique_ptr<double>pdu(new