[modern c++] 不要对一个对象创建多个 shared_ptr

前言:

shared_ptr 可以用来自动管理实例(内存) 的生命周期,但是如果对同一个实例(内存) 创建多个 shared_ptr 则可能引起 double free 的问题。




Demo:

cpp 复制代码
#include <memory>
#include <string>
#include <iostream>

using namespace std;

class A{
public:
   ~A(){
     cout << "~A()" << endl;
   }
};

int main(){
   A *pa = new A();
   {
     shared_ptr<A> sp1 =  shared_ptr<A>(pa);
     shared_ptr<A> sp2 =  shared_ptr<A>(pa);
   }
   cout << "----" << endl;
}

上面的 实例 在 第一个 sp1 销毁的时候就已经被销毁了,后面的 sp2 会触发double free。

相关推荐
码匠许师傅1 小时前
【C++ 面试真题】聊聊 C++ 中的 lambda 表达式
java·c++·面试
依然鸣2 小时前
PTA团体程序设计天梯赛L1真题讲解L1-085-088
数据结构·c++·经验分享·算法·深度优先·pat考试
沙盘客2 小时前
AFSIM 14篇 C++ 插件开发:扩展你的仿真能力
c++·后端
NeilYuen2 小时前
【vemory】高性能KV存储AOF方案设计
linux·c++·redis·缓存
王老师青少年编程4 小时前
2021年CSP-J初赛真题及答案解析(完善程序2)
c++·真题·csp-j·答案·csp·初赛·信奥赛
有点。4 小时前
C++二叉树(一)
开发语言·数据结构·c++
Lazionr4 小时前
stack与queue:底层实现与容器适配器
开发语言·数据结构·c++
豆沙沙包?5 小时前
C++~~~vector容器(p31-P40)
开发语言·c++
小小de风呀5 小时前
de风——【从零开始学习C++】(十八):AVL树——让二叉搜索树自己“站起来“的自平衡黑科技
c++·科技·学习
牛油果子哥q5 小时前
C++STL容器详解:vector/list/string底层扩容、迭代器失效终极解决、容器选型避坑
开发语言·c++·list