浅谈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<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) ; 
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 总结 unique_ptr指针的一些特性总结 默认情况下,占用的内存大小和raw指针一样。(除非指定了用户自定义d...
    EVANMORE阅读 1,127评论 0 2
  • 参考资料:《C++ Primer中文版 第五版》我们知道除了静态内存和栈内存外,每个程序还有一个内存池,这部分内存...
    陈星空阅读 1,075评论 0 0
  • shared_ptr 类 类似 vector,智能指针也是模板。因此,当我们创建一个智能指针时,必须提供额外的信息...
    赵者也阅读 873评论 0 0
  • 1. 什么是智能指针? 智能指针是行为类似于指针的类对象,但这种对象还有其他功能。 2. 为什么设计智能指针? 引...
    MinoyJet阅读 646评论 0 1
  • 好想做你近旁的一株木棉 可是却因为爱你 我卑微到尘埃里 你 是那样一种人 读不懂冷漠下的热情 微笑中的忧伤
    宁可十一阅读 116评论 0 1