c++ - 这是制作单例类的正确程序吗?

标签 c++

我是编程新手,我正在尝试创建类单例的程序。这是创建类单例的正确方法吗??

#include <iostream>
using namespace std;
class Singleton
{
private:
    static bool instanceFlag;
    static Singleton *single;
public:
    static Singleton* getInstance();
    void method();
    ~Singleton()
    {
        instanceFlag = false;
    }
};
bool Singleton::instanceFlag = false;
Singleton* Singleton::single = NULL;
Singleton* Singleton::getInstance()
{
    if(! instanceFlag)
    {
        single = new Singleton();
        instanceFlag = true;
        return single;
    }
    else
    {
        return single;
    }
}
void Singleton::method()
{
    cout << "Method of the singleton class";
}
int main()
{
    Singleton *sc1,*sc2;
    sc1 = Singleton::getInstance();
    sc1->method();
    sc2=Singleton::getInstance();
    sc2->method();
    return 0;
}

这是创建类单例的正确方法吗??

最佳答案

你把事情搞得太复杂了。尝试 Scott Meyers 单例:

struct SingletonClass {
    // instance() function return a reference
    static SingletonClass& instance() {
        // static local variable are initialized one time.
        static SingletonClass inst;

        // We return the instance, which is the same for every calls.
        return inst;
    }

private:
    // Private since we don't want other class to create instances
    SingletonClass() = default;

    // Our class is not copiable or movable
    SingletonClass(const SingletonClass&) = delete;
    SingletonClass(SingletonClass&&) = delete;
    SingletonClass& operator=(const SingletonClass&) = delete;
    SingletonClass& operator=(SingletonClass&&) = delete;
};

你可以像这样使用你的类:

auto& myInstance = SingletonClass::instance();

好处:它不使用动态分配,它是线程安全的,而且简单得多。

关于c++ - 这是制作单例类的正确程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41126128/

相关文章:

c++ - 使用 pthread 同时 push() 到共享队列?

c++ - 我可以在 MSVC++ 中使用 128 位整数吗?

c++ - 如何使用 C++11 显式模板来减少二进制大小?

C++ 词袋 - OpenCV : Assertion Failed

c++ - 即使串行可用,代码也会继续循环

c++ - 使用转换函数直接初始化

c++ - 没有用于调用连接的匹配函数 - Qt 5.5

c++ - C2886 class/struct typedef类自继承使用

c# - Visual Studio C++ 和 C# 的键盘快捷键

c++ - C++中带初始化参数的构造函数