用shared_ptr 封装一个类的getInstance,当智能指针释放完后,该类析构,并且要求多线程安全,写一个样例代码
时间: 2023-04-09 21:03:33 浏览: 156
好的,这是一个技术问题,我可以回答。以下是一个使用shared_ptr封装getInstance的多线程安全的示例代码:
```c++
#include <memory>
#include <mutex>
class MyClass {
public:
static std::shared_ptr<MyClass> getInstance() {
std::lock_guard<std::mutex> lock(mutex_);
if (instance_ == nullptr) {
instance_ = std::shared_ptr<MyClass>(new MyClass);
}
return instance_;
}
private:
MyClass() {}
static std::shared_ptr<MyClass> instance_;
static std::mutex mutex_;
};
std::shared_ptr<MyClass> MyClass::instance_ = nullptr;
std::mutex MyClass::mutex_;
```
在这个示例代码中,我们使用了一个静态的shared_ptr成员变量instance_来保存类的唯一实例。getInstance方法首先获取一个互斥锁,然后检查instance_是否为nullptr。如果是,就创建一个新的实例并将其赋值给instance_。最后,返回instance_的shared_ptr。
由于使用了互斥锁,这个实现是线程安全的。当所有持有instance_的shared_ptr都被释放后,instance_会被销毁,从而调用MyClass的析构函数。
阅读全文