码迷,mamicode.com
首页 > 其他好文 > 详细

smart_ptr之shared_ptr

时间:2018-10-30 14:48:03      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:常用   auto_ptr   c++11   对象   改进   功能   enable   析构函数   管理   

c++11标准和boost都提供了智能指针的功能。智能指针是普通指针的封装,智能指针是一个对象,对象里面包含了原生指针。可以使用智能指针对象的get()方法可获得封装在里面的原生指针。使用智能指针管理内存,用到智能指针的地方需要统一使用c++11或boost库,切忌混合使用。c++11的智能指针包含在<memory>库,boost库是<boost/smart_ptr>。

最常用到的智能指针是shared_ptr,是对auto_ptr(已弃用)和unique_ptr的改进。shared_ptr是引用计数型指针,所以它以前曾有名字count_ptr。当拷贝一个对象时(比如调用拷贝构造函数、调用赋值函数、作为函数参数传递(会在函数内部拷贝一个临时对象,当退出函数时,析构该对象))引用计数加1,当调用析构函数和reset()重置函数时,引用计数减1。当引用计数为0时,会delete该对象里的指针。shared_ptr是使用new申请内存,不能应用于使用new[]分配内存的场景。

在对象的函数参数中,如果需要传递该对象this指针,可以将该对象所在类继承自enable_shared_form_this<T>,使用该类的shared_from_this()函数会返回一个封装了this指针的shared_ptr<T>对象。这种使用场景在,异步调用过程中,不知道何时调用回调函数,而该回调函数里需要使用到this对象。这就保证了无论何时调用回调函数u,this对象都一直存在且有效。

smart_ptr之shared_ptr

标签:常用   auto_ptr   c++11   对象   改进   功能   enable   析构函数   管理   

原文地址:https://www.cnblogs.com/jingliang10101/p/9876464.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!