unique_ptr是用来独占地持有对象的
智能指针的提出背景:
我们经常会遇到这种内存问题:
1. 忘记delete内存,造成内存泄露。
2. 当出现异常时,没有执行delete程序就已经退出了,造成内存泄漏
因此我们为了避免这种问题过去常常采用:
try{..
}
catch(....)
{
delete ptr;
throw;
}
而对于智能指针来说,当对象退出作用域的时候,智能指针户自动调用对象的析构函数,避免了内存泄漏。
unique_ptr的特性:
1. 创建unique_ptr
想要创建一个unique_ptr,需要将一个new操作符返回的指针传递给unique_ptr的构造函数
unique_ptr<int> pInt(new int(5));
2. unique_ptr没有复制和赋值操作。
例如:
unique_ptr<int> pInt(new int(5));
unique_ptr<int> pInt2(pInt); // 报错,不能赋值
unique_ptr<int> pInt3 = pInt; //报错,不能复制,没有复制构造函数。
3. 可以进行移动操作。
相当于转移了所有权,使用std::move()函数
unique_ptr<int> pInt(new int(5));
unique_ptr<int> pInt2 = std::move(pInt) ;