能否将一个单例类用shared_ptr封装,在一个游离线程中拷贝该智能指针,使主进程不析构该类
时间: 2023-04-10 22:03:22 浏览: 204
C++智能指针shared_ptr分析
可以将单例类用shared_ptr封装,并在游离线程中拷贝该智能指针,使主进程不析构该类。但是需要注意的是,单例类的析构函数应该是私有的,以确保只有shared_ptr才能析构该类。同时,需要使用std::atomic来保证线程安全。以下是示例代码:
class Singleton {
private:
Singleton() {}
~Singleton() {}
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
public:
static Singleton& getInstance() {
static Singleton instance;
return instance;
}
};
std::shared_ptr<Singleton> singletonPtr = std::shared_ptr<Singleton>(&Singleton::getInstance(), [](Singleton*){});
std::thread t([&](){
std::shared_ptr<Singleton> copyPtr = singletonPtr;
});
t.join(); // 等待线程结束
在这个示例代码中,我们首先定义了一个私有的单例类Singleton,然后使用std::shared_ptr将其封装起来,并定义了一个空的lambda函数作为析构函数。接着,我们在游离线程中拷贝了该智能指针,并在主线程中等待线程结束。这样,即使主线程退出,单例类也不会被析构。
阅读全文