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

相关推荐
艾莉丝努力练剑5 小时前
【AI大模型接入SDK】ChatSDK 集成测试概述
jvm·c++·人工智能·学习·面试·集成测试·sdk
艾莉丝努力练剑5 小时前
【AI大模型接入SDK】ChatSDK:CMake构建静态库完整实现
java·开发语言·网络·c++·人工智能·学习·sdk
東隅已逝,桑榆非晚5 小时前
stack和queue(类函数学习和模拟实现)
c++·笔记·学习
.道阻且长.5 小时前
C++11 :右值引用的作用,引用折叠和完美转发
java·开发语言·c++
朔北之忘 Clancy15 小时前
2025 CSP-J 第二轮真题解析
c++·青少年编程·题解·noip·csp·信奥赛·noi
longlongzihan15 小时前
LeetCode 17电话号码的字母组合:回溯算法(DFS)详解
c++·算法·leetcode·深度优先
yolo_guo15 小时前
调试mysql延迟与libevent回调实际发送回复时机问题
c++·mysql·libevent
今晚打老虎16 小时前
c++之提高A(前缀和)(第三课)
数据结构·c++·算法
by2099917 小时前
从结构体到对象:正式学习C++类的骨架、封装与this指针
c++·经验分享·学习
2601_9622186118 小时前
C语言中三种库的编译和使用方法
开发语言·c++