[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。

相关推荐
一个小猴子`4 小时前
CUDA全局内存
c++·cuda编程
ysa0510304 小时前
【板子】树上启发式合并
数据结构·c++·笔记·算法
Simple_core5 小时前
cmake模板和问题总结
c++
劉宇雁6 小时前
C++ ASCII 3D无尽跑酷游戏
c++·游戏·3d
杜子不疼.7 小时前
【C++ 在线五子棋对战】- 会话管理模块实现
开发语言·c++
有点。7 小时前
C++深度优先搜索(DFS)的概念(一)
开发语言·c++·深度优先
旖-旎7 小时前
《LeetCode 978 最长湍流子数组 || LeetCode 139 单词拆分》
c++·算法·leetcode·动态规划
aaPIXa6227 小时前
C++大型项目模块化拆分实战记录
开发语言·c++
石山代码7 小时前
C++23 新特性在 CLion 中的实战体验
开发语言·c++·c++23
在线OJ的阿川7 小时前
仿muduo库实现高并发服务器
linux·服务器·c++