浅谈c++中的unique_ptr

unique_ptr是用来独占地持有对象的

智能指针的提出背景:

我们经常会遇到这种内存问题
1. 忘记delete内存,造成内存泄露。
2. 当出现异常时,没有执行delete程序就已经退出了,造成内存泄漏
因此我们为了避免这种问题过去常常采用:

try{..
} 
catch(....)
{
    delete ptr;
    throw;
}

而对于智能指针来说,当对象退出作用域的时候,智能指针户自动调用对象的析构函数,避免了内存泄漏。


unique_ptr的特性:

1. 创建unique_ptr

想要创建一个unique_ptr,需要将一个new操作符返回的指针传递给unique_ptr的构造函数

unique_ptr pInt(new int(5));
2. unique_ptr没有复制和赋值操作。

例如:

unique_ptr pInt(new int(5));
unique_ptr pInt2(pInt);    // 报错,不能赋值
unique_ptr pInt3 = pInt;   //报错,不能复制,没有复制构造函数。
3. 可以进行移动操作。

相当于转移了所有权,使用std::move()函数

unique_ptr pInt(new int(5));
unique_ptr pInt2 = std::move(pInt) ; 

你可能感兴趣的:(浅谈c++中的unique_ptr)