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