c++ - 我的单例模板真的是单例吗?

标签 c++ design-patterns

有人告诉我,我的单例模板可能不是真正的单例,因为有多种方法可以用它创建多个对象。当我问如何修复它时,我被忽略了。这就是为什么我来这里问我的单例模板类真的是单例吗?

#ifndef SINGLETON_H_
#define SINGLETON_H_

template <class T>
class Singleton
{
private:
static T* instance;

protected:
    Singleton<T>(  )
    {
    }

public:
    static T* getInstancePtr(  )
    {
        if ( instance == 0 )
            instance = new T(  );

        return instance;
    }
};

template <class T> T* Singleton<T>::instance = 0;

#endif

然后它被一个类继承,我希望它像这样成为一个单例:-

class Console : public Singleton< Console >
{
};

最佳答案

您已使默认构造函数 protected 。派生类可以访问它,所以这将编译:

Console c1, c2;

关于c++ - 我的单例模板真的是单例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11267725/

相关文章:

c++ - `new` 运算符是否总是调用构造函数?

c# - 在这种情况下应该使用什么设计模式?

c++ - 矛盾的未解析外部符号+未使用的库与 VS2017 和 FFMPEG 4

c# - C# 中 ValidationError 类的合理模式

c# - 在 IObservable<T> 接口(interface)中返回 IDisposable 的目的是什么?

design-patterns - 您使用什么设计模式,它有什么好处?

c++ - 获取错误流浪 ‘\342’ 和 ‘\200’ 和 ‘\214’

c++ - 二维数组中指针衰减后的大小

C++ lambda 表达式 - 编译器如何解释它们?