3

我只是在想新的 C++11 类内成员初始化器是否可用于在编译时初始化单例,这可能是我应用程序中某些管理器类的加速:

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'

有没有办法在编译时用这种或另一种方法初始化单例?

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

4

1 回答 1

-1

在类的 .h 文件成员中:

static CSingleton s_Instance;

在 .cpp 文件中,在 include 之后的开头

CSingleton::s_Instance = CSingleton();

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

于 2012-04-12T12:33:36.643 回答