[英]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.