#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_shared
和std::shared_ptr
来管理动态分配的对象的生命周期,并自动处理其内存释放。