通常当我实现单例时,我使实例动态化,并有一个成员函数来删除它.在这种情况下,我正在使用嵌入式设备,我被告知我不能使用动态内存.它对一个类在类声明中有自己的静态实例是有效的,并通过引用返回它?
(此处不关注线程安全性.)
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调用函数时进行初始化.
| 归档时间: |
|
| 查看次数: |
5551 次 |
| 最近记录: |