在编译时单例初始化

时间:2012-04-12 12:29:22

标签: c++ c++11

我只是在考虑是否可以使用新的C ++ 11类内成员初始值设定项在编译时初始化Singletons,这可能是我应用程序中某些Manager-Classes的加速:

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'

有没有办法在编译时使用这种方法或其他方法初始化Singletons?

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

1 个答案:

答案 0 :(得分:0)

在班级的.h文件成员中:

static CSingleton s_Instance;

在.cpp文件中的开头右边的包含

CSingleton::s_Instance = CSingleton();

这是编译时的初始化。 使用new - 这是在运行时初始化。正式地,它们都在编译时初始化。