我可以在C++中返回对该类中的静态类(单例)实例的引用吗?

Eva*_* B. 2 c++ singleton

通常当我实现单例时,我使实例动态化,并有一个成员函数来删除它.在这种情况下,我正在使用嵌入式设备,我被告知我不能使用动态内存.它对一个类在类声明中有自己的静态实例是有效的,并通过引用返回它?

(此处不关注线程安全性.)

class Foo {
private:
    static Foo singleton;

    Foo() { }
    Foo(const Foo &rhs);
    Foo &operator=(const Foo &rhs);

public:
    inline static Foo &Instance(void) {
        return singleton;
    }
};

Foo Foo::singleton;
Run Code Online (Sandbox Code Playgroud)

cel*_*chk 12

可以有一个静态实例,但是不希望它在类级别上,因为它可能会在访问时尚未初始化(由于未完全定义的静态初始化顺序).相反,你应该使用函数本地静态:

class Foo {
private:
    Foo() { }
    Foo(const Foo &rhs);
    Foo &operator=(const Foo &rhs);

public:
    inline static Foo &Instance(void) {
        static Foo singleton;
        return singleton;
    }
};
Run Code Online (Sandbox Code Playgroud)

这样就可以保证在第一次Instance调用函数时进行初始化.