使用中有什么区别:
static Foo foo;
// ...
foo.func();
同时:
Foo& GetFoo(void)
{
static Foo foo;
return foo;
}
// ...
GetFoo().func();
哪个更好?
使用中有什么区别:
static Foo foo;
// ...
foo.func();
同时:
Foo& GetFoo(void)
{
static Foo foo;
return foo;
}
// ...
GetFoo().func();
哪个更好?
主要区别在于构造发生的时间。在第一种情况下,它发生在 main()
开始之前的某个时刻。而在第二种情况下,它发生在第一次调用 GetFoo()
期间。
在第一种情况下,代码有可能在初始化 foo
之前(非法地)使用它。而在第二种情况下,这是不可能的。
GetFoo
通常用于当您不想要类/对象的副本时。
class Foo
{
private:
Foo(){};
~Foo();
public:
static Foo* GetFoo(void)
{
static Foo foo;
return &foo;
}
int singleobject;
};
您可以通过Foo::GetFoo()->sinlgeobject
外部访问singleobject
。私有构造函数和析构函数避免了创建类的副本。
对于使用static Foo foo
,您必须声明公共构造函数,这意味着您始终通过它来访问您的类,但是您的类也将能够获得副本。