为什么要有智能指针
std::string * ps = new std::string(str);
...
if (weird_thing())
throw exception();
str = *ps;
delete ps;
如果出错指针ps未被释放,内存泄漏
希望指针可以自动释放,已知对象的析构函数会自动调用,删除指针。但是ps为普通指针,没有析构函数。
所以,智能指针的思想就是把普通指针变为对象
智能指针的使用
auto_ptr、unique_ptr、shared_ptr和weak_ptr
shared_ptr<double> pd;
double *p_reg = new double;
pd = p_reg; // not allowed (implicit conversion)
pd = shared_ptr<double>(p_reg); // allowed (explicit conversion)
shared_ptr<double> pshared = p_reg; // not allowed (implicit conversion)
shared_ptr<double> pshared(p_reg); // allowed (explicit conversion)
所有的智能指针,不能让分配在栈中的指针变为智能指针,因为栈中的自动删除
string vacation("I wandered lonely as a cloud.");
shared_ptr<string> pvac(&vacation); // No