c++11 基类不是单例继承std::enable_shared_from_this,子类是单例
时间: 2024-12-02 08:15:24 浏览: 4
//下面是间接派生类构造函数-谭浩强_经典_c++教程_第11章
在C++11中,如果你有一个基类不是使用`std::enable_shared_from_this`作为单例模式,而它的子类打算作为单例,那么你需要特别处理共享指针(如`std::shared_ptr`),因为`enable_shared_from_this`是为了让对象能够方便地从一个共享智能指针返回自身。
基类的情况可能像这样:
```cpp
class NonSingletonBase {
//...
};
```
子类想要作为单例的话,通常会这样做:
```cpp
class SingletonSubClass : private NonSingletonBase {
private:
static std::once_flag flag;
static std::shared_ptr<SingletonSubClass> instance;
protected:
SingletonSubClass() = default;
~SingletonSubClass() = default;
public:
static std::shared_ptr<SingletonSubClass>& getInstance() {
std::call_once(flag, []{
instance = std::make_shared<SingletonSubClass>();
});
return instance;
}
private:
// 防止直接实例化
SingletonSubClass(SingletonSubClass const&) = delete;
SingletonSubClass& operator=(SingletonSubClass const&) = delete;
};
```
在这里,`getInstance()`函数确保只创建一个实例,并通过`std::call_once`保证线程安全。
阅读全文