我只是在考虑是否可以使用新的C++ 11类内成员初始化程序在编译时初始化Singleton,这可能会加快我的应用程序中某些Manager-Class的速度:

class CSingleton
{
public:
    CSingleton(void) {}
    ~CSingleton(void) {}
    static const CSingleton* GetInstance(void)
    {
        return Instance;
    }

    bool Foo1(int x);
    bool Foo2(int y);
private:
    static constexpr CSingleton *Instance = new CSingleton();
}

问题是,这导致以下错误:
Line of Instance declaration:    error: invalid use of incomplete type 'class test::CSingleton'
First Line of class declaration: error: forward declaration of 'class test::CSingleton'

有没有一种方法可以在编译时使用这种方法或另一种方法来初始化Singleton?

[我在设置-std = c++ 0x标志的MacOSX10.7(和Ubuntu)上使用GCC4.7]

最佳答案

在.h文件类的成员中:

static CSingleton s_Instance;

在.cpp文件中,在包含之后的开头
CSingleton::s_Instance = CSingleton();

这是编译时的初始化。
使用new-这是在运行时初始化。两者都在编译时正式初始化。

关于c++ - 在编译时进行单例初始化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10123592/

10-13 08:22