欢迎光临散文网 会员登陆 & 注册

Effective C++ 第十七条 Store newed objects in smart pointer in stand

2023-01-17 03:30 作者:九思519  | 我要投稿

以独立语句将 newed 对象置入智能指针

        在之前的学习中,我们知道智能指针的使用可以在构造的时候使用 new .

        但有的时候,我们也许不仅仅是只创建一个智能指针对象,还会同时使用其他语句

        在 fun 执行之前要申请资源 new int ,构造 shared_ptr 还要调用 getNum ,这个顺序又编译器决定,有可能先执行 getNum,也有可能先执行new int 、shared_ptr 的构建(new int 一定在  shared_ptr 构造函数之前)。考虑到一种情况,顺序如下

  1. 申请资源 new int

  2. 执行 getNum

  3. 构建 shared_ptr

        第一步执行成功,第二步出问题,导致程序异常退出,此时尚未构建 shared_ptr,new int 申请的资源并没有相应的析构函数来释放,也就是会造成错误。也许编译器不是按这个顺序来的,但是我们要考虑到。所以保险的措施是将构建 shared_ptr 和 执行 getNum 单独执行。

这样 shared_ptr 一定会先被构建完成再调用 getNum,也就不会出现上述问题。


Effective C++ 第十七条 Store newed objects in smart pointer in stand的评论 (共 条)

分享到微博请遵守国家法律