智能指针和std::make_shared函数,c++,linux

复制代码
#include <iostream>  
#include <memory> // 用于std::shared_ptr和std::make_shared  
  
class SocketCanClient {  
public:  
    SocketCanClient() {  
        std::cout << "SocketCanClient created\n";  
    }  
      
    ~SocketCanClient() {  
        std::cout << "SocketCanClient destroyed\n";  
    }  
      
    void doSomething() {  
        std::cout << "SocketCanClient is doing something\n";  
    }  
      
    // 假设这里还有其他与CAN通信相关的方法和成员变量  
};

然后,在程序的某个部分,我们使用std::make_shared来创建SocketCanClient的实例:

复制代码
int main() {  
    // 使用std::make_shared创建SocketCanClient的共享指针  
    std::shared_ptr<SocketCanClient> canBusClient = std::make_shared<SocketCanClient>();  
      
    // 使用共享指针调用SocketCanClient的方法  
    canBusClient->doSomething();  
      
    // 当canBusClient离开作用域或被重置时,SocketCanClient对象将被自动删除  
    // 在这个例子中,当main函数结束时,对象将被销毁  
      
    return 0;  
}

在这个例子中,当main函数开始执行时,canBusClient变量通过std::make_shared被初始化为指向新创建的SocketCanClient对象的共享指针。随后,我们通过canBusClient调用了doSomething方法。当main函数结束时,由于canBusClient是一个局部变量,它将被销毁。由于canBusClient是一个std::shared_ptr,它将自动删除它所指向的SocketCanClient对象,从而避免了手动管理内存的需要。

输出将类似于:

复制代码
SocketCanClient created  
SocketCanClient is doing something  
SocketCanClient destroyed

这展示了如何使用std::make_sharedstd::shared_ptr来管理动态分配的对象的生命周期,并自动处理其内存释放。

相关推荐
We་ct39 分钟前
LeetCode 5. 最长回文子串:DP + 中心扩展
前端·javascript·算法·leetcode·typescript
HHFQ4 小时前
在 systemd 场景下的 CPU 限制方式
linux
道清茗5 小时前
【RH294知识点汇总】第 9 章 《 自动执行 Linux 管理任务 》常见问题
linux·运维·服务器
山羊硬件Time5 小时前
自动化管理Linux的好工具:shell script
linux·嵌入式硬件·硬件工程师·基带工程·硬件开发
王老师青少年编程5 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【哈夫曼贪心】:合并果子
c++·算法·贪心·csp·信奥赛·哈夫曼贪心·合并果子
叼烟扛炮5 小时前
C++第二讲:类和对象(上)
数据结构·c++·算法·类和对象·struct·实例化
天疆说5 小时前
【哈密顿力学】深入解读航天器交会最优控制中的Hamilton函数
人工智能·算法·机器学习
wj3055853785 小时前
Codex + Git 开发环境配置指南(WSL版)
linux·运维·git
星马梦缘6 小时前
如何切换window-ubuntu双系统【方案二】
linux·运维·ubuntu
wuweijianlove6 小时前
关于算法设计中的代价函数优化与约束求解的技术7
算法