智能指针和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来管理动态分配的对象的生命周期,并自动处理其内存释放。

相关推荐
iAkuya2 分钟前
(leetcode)力扣100 36二叉树的中序遍历(迭代递归)
算法·leetcode·职场和发展
wangwangmoon_light10 分钟前
1.1 LeetCode总结(线性表)_枚举技巧
算法·leetcode·哈希算法
码农小韩37 分钟前
基于Linux的C++学习——动态数组容器vector
linux·c语言·开发语言·数据结构·c++·单片机·学习
Joren的学习记录41 分钟前
【Linux运维大神系列】Kubernetes详解3(kubeadm部署k8s1.23高可用集群)
linux·运维·kubernetes
mit6.82443 分钟前
几何|阻碍链
算法
有一个好名字1 小时前
力扣-小行星碰撞
算法·leetcode·职场和发展
MM_MS1 小时前
Halcon图像锐化和图像增强、窗口的相关算子
大数据·图像处理·人工智能·opencv·算法·计算机视觉·视觉检测
lamentropetion1 小时前
E - Equal Tree Sums CF1656E
算法
hui函数1 小时前
如何解决 pip install 编译报错 g++: command not found(缺少 C++ 编译器)问题
开发语言·c++·pip
代码游侠1 小时前
应用——智能配电箱监控系统
linux·服务器·数据库·笔记·算法·sqlite