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

相关推荐
handler011 天前
从零实现自动化构建:Linux Makefile 完全指南
linux·c++·笔记·学习·自动化
我头发多我先学1 天前
C++ 模板全解:从泛型编程初阶到特化、分离编译进阶
java·开发语言·c++
星星码️1 天前
C++选择题练习(一)
开发语言·c++
小苗卷不动1 天前
OJ练习之疯狂的自我检索者(简单)
c++
LUVK_1 天前
第七章查找
数据结构·c++·考研·算法·408
迷途之人不知返1 天前
vector
c++
khalil10201 天前
代码随想录算法训练营Day-31贪心算法 | 56. 合并区间、738. 单调递增的数字、968. 监控二叉树
数据结构·c++·算法·leetcode·贪心算法·二叉树·递归
小苗卷不动1 天前
进程与线程的核心区别
c++
啊我不会诶1 天前
2024ICPC西安邀请赛补题
c++·算法
ZenosDoron1 天前
keil软件修改字体,Asm editor,和C/C++ editor的区别
c语言·开发语言·c++