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

相关推荐
liuyao_xianhui23 分钟前
内存管理(C/C++)
java·开发语言·c++
饭碗的彼岸one40 分钟前
C++设计模式之单例模式
c语言·开发语言·c++·单例模式·设计模式·饿汉模式·懒汉模式
Tim_101 小时前
【算法专题训练】20、LRU 缓存
c++·算法·缓存
Vect__1 小时前
从零实现一个简化版string 类 —— 深入理解std::string的底层设计
c++
hope_wisdom1 小时前
C/C++数据结构之栈基础
c语言·数据结构·c++··stack
ajassi20001 小时前
开源 C++ QT Widget 开发(十四)多媒体--录音机
linux·c++·qt·开源
劲镝丶3 小时前
malloc概述
c语言·开发语言·c++
努力努力再努力wz4 小时前
【C++进阶系列】:万字详解红黑树(附模拟实现的源码)
java·linux·运维·c语言·开发语言·c++
cccyi74 小时前
C/C++类型转换
c++
枫fengw4 小时前
9.8 C++
开发语言·c++