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

C++共享指针实战

需求:
有三个类,分别是A,B, R。在B类里new 了一个R的智能指针, 这个R的生命周期和B相同。同时A类也存了一个B中存放关于R的智能指针。B销毁同时A指向R的指针也失效,并调用R的析构函数,如何实现

#include <iostream>
#include <memory>class R {
public:~R() {std::cout << "R's destructor called" << std::endl;}
};class B {
public:std::shared_ptr<R> r_ptr;B() {r_ptr = std::make_shared<R>();}
};class A {
public:std::weak_ptr<R> r_weak_ptr;void setRPtr(const std::shared_ptr<R>& r_ptr) {r_weak_ptr = r_ptr;}void useRPtr() {std::shared_ptr<R> r_shared_ptr = r_weak_ptr.lock();if (r_shared_ptr) {// 使用r_shared_ptrstd::cout << "Using R through A" << std::endl;} else {std::cout << "R has been destroyed" << std::endl;}}
};int main() {{A a;{B b;a.setRPtr(b.r_ptr);a.useRPtr(); // 输出: Using R through A} // B对象在这里被销毁,R的引用计数减为0,R的析构函数被调用a.useRPtr(); // 输出: R has been destroyed}return 0;
}

http://www.mrgr.cn/news/91432.html

相关文章:

  • ls命令的全面参数解析与详尽使用指南
  • 观察者模式原理详解以及Spring源码如何使用观察者模式?
  • gcc和g++的区别以及明明函数有定义为何链接找不到
  • 3.10 企业级AI内容生成引擎:从策略到落地的全链路技术指南
  • 02.05、链表求和
  • 网络安全的态势如何以及如何解决?
  • 投资组合风险管理
  • Day48(补)【AI思考】-设计模式三大类型统一区分与记忆指南
  • Java-数据结构-(HashMap HashSet)
  • 【实用技巧】云服务器+FRP搭建自己的远程控制向日葵
  • 计算机毕业设计Python商品推荐系统 商品比价系统 电商比价系统 商品可视化(代码+LW文档+PPT+讲解视频)
  • Rust中的collections
  • 2013年下半年软件设计师上午题考察知识点及其详细解释(附真题及答案解析)
  • Leetcode2080:区间内查询数字的频率
  • 文档检测校正的重要性
  • Mycat中间件
  • 【TI C2000】F28002x的系统延时、GPIO配置及SCI(UART)串口发送、接收
  • leetcode-495.提莫攻击
  • 【16届蓝桥杯寒假刷题营】第2期DAY1I
  • 视点坐标及鼠标交点坐标的信息显示(七)