[英]global static variable vs static variable in function?
使用之间有什么不同:
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;
};
您可以从外部访问, singleobject
通过Foo::GetFoo()->sinlgeobject
。 私有构造函数和析构函数可以避免您的类创建副本。
对于static Foo foo
的使用,您必须声明公共构造函数,这意味着您始终通过它访问您的类,但您的类也将能够获取副本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.