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

相关推荐
无名猿3 小时前
nullptr 取代 NULL 和 0:空指针的三种写法和唯一正确解
c++·现代c++·语法基础·踩坑记录
大侠归来3 小时前
C++ 与 Lua 的协程交互:从原理到实战
c++·lua·交互
无名猿3 小时前
size_t 与 int 混用陷阱:有符号无符号比较与整数提升
c++·标准库·语法基础·踩坑记录
.道阻且长.3 小时前
C++ 11:可变参数模板
前端·c++·算法
m0_380743874 小时前
Qt实现调用相机进行拍照并进行图像处理
开发语言·c++
励志不掉头发的内向程序员5 小时前
【从零写一个CAD 03】三个 double 值得单独一个类吗:把视图变换抽成 View
开发语言·c++·qt·学习·系统架构
蒸蒸yyyyzwd12 小时前
秋招学习笔记 day46
c++·八股
码匠许师傅16 小时前
【C++三方组件】cpp-httplib:一个头文件起 HTTP 服务
开发语言·c++·http
无名猿16 小时前
new/delete 与 malloc/free:为什么绝对不能混用
c++·内存管理·现代c++·踩坑记录
2601_9622186118 小时前
C++中decltype关键字的实现
开发语言·c++