当前位置: 首页 > article >正文

C++ 科目二 智能指针 [weak_ptr] (解决shared_ptr的循环引用问题)

shared_ptr引入的重复计数问题,导致内存泄漏

using namespace std;
class CFather;
class CSon;

class CFather {
public:
    CFather()
    {}
    void Set(shared_ptr<CSon> pson)
    {
        Pson = pson;
    }

    shared_ptr<CSon> Pson;
};

class CSon {
public:
    CSon()
    {}
    void Set(shared_ptr<CFather> pfather)
    {
        Pfather = pfather;
    }

    shared_ptr<CFather> Pfather;
};

int main()
{
    CSon *pson = new CSon();
    CFather *pfather = new CFather();
    {
        shared_ptr<CFather> shared_father(pfather);
        shared_ptr<CSon> shared_son(pson);

        shared_father->Set(shared_son);
        shared_son->Set(shared_father);

        cout << shared_father.use_count() << endl;
        cout << shared_son.use_count() << endl;
    }
    cout << "It's good to see you!" << endl;
    return 0;
}

将CFather或者CSon的shared_ptr变成weak_ptr即可避免内存泄漏问题


http://www.kler.cn/news/307359.html

相关文章:

  • websocket消息推送修改
  • PostgreSQL的查看主从同步状态
  • 凸优化学习(3)——对偶方法、KKT条件、ADMM
  • 「C++系列」文件和流
  • 医学数据分析实训 项目四回归分析--预测帕金森病病情的严重程度
  • Java设计模式—面向对象设计原则(二) --------> 里氏代换原则 LSP (完整详解,附有代码+案列)
  • Linux 系统盘空间不足,想要将 Docker 镜像和容器数据迁移到数据盘
  • sqlgun靶场攻略
  • Mysql系列-索引简介
  • Vert.x HttpClient调用后端服务时使用Idle Timeout和KeepAlive Timeout的行为分析
  • 11.java面向对象
  • macOS上谷歌浏览器的十大隐藏功能
  • c语言中的常量定义(补充)
  • 【兼容性记录】video标签在 IOS 和 安卓中的问题
  • 队列-------
  • 英语学习交流平台|基于java的英语学习交流平台系统小程序(源码+数据库+文档)
  • EP12 分类列表元素点击跳转
  • 【云原生监控】Prometheus之PushGateway
  • 机器学习的入门指南
  • JVM HotSpot 虚拟机: 对象的创建, 内存布局和访问定位
  • Oracle数据库中的归档日志(Archive Log)详解与应用
  • 07_Python数据类型_集合
  • 系统 IO
  • 08_Python数据类型_字典
  • C# 记录一个获取系统空闲时间的函数,可用于判断休眠
  • 性能测试:Locust使用介绍(三)
  • MoCo对比损失
  • LC并联电路在正弦稳态下的传递函数推导(LC并联谐振选频电路)
  • 带你如何使用CICD持续集成与持续交付
  • 2024网络安全、应用软件系统开发决赛技术文件