簡體   English   中英

全局靜態變量vs函數中的靜態變量?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM