现在的位置: 首页 > 综合 > 正文

Effective Modern C++读书笔记:第4章 智能指针

2016年05月06日 ⁄ 综合 ⁄ 共 671字 ⁄ 字号 评论关闭
Raw pointer的缺点:
1、从原生的指针的声明中,不能得知这个指针是指向单个对象还是指向对象数组;
2、不知道是否应该销毁它,当你使用完之后;
3、不知道怎么销毁;
4、delete or delete[]?
5、不能确保程序的每个流程里都调用了delete或delete[],比如在异常发生的时候。这会导致内存泄漏;
6、无法判断raw pointer是否是dangle(悬挂指针)。


在C++11里有4个智能指针:
std::auto_ptr:    deprecated
std::unique_ptr: 用来代替std::auto_ptr
std::shared_ptr:使用引用计数的资源控制方法
std::weak_ptr:配合std::shared_ptr,可以用来判断指针是否dangle。


std::unique_ptr:用std::unique_ptr管理独占的资源,通常用来做工厂方法的返回类型
std::shared_ptr:内含2个指针,一个指向对象,一个指向control block
auto pw = new Widget;

std::shared_ptr<Widget> spw1(pw, loggingDel);
std::shared_ptr<Widget> spw2(pw, loggingDel);
上面的3行代码是典型的误用,会导致pw被delete两次,产生undefined行为。

std::enable_shared_from_this

shared_from_this()

std::weak_ptr:control block里有weak ref count

抱歉!评论已关闭.