簡體   English   中英

在C ++中使用靜態成員作為類類型

[英]usage of static member as a class typein C++

基於“c ++ primer”,靜態數據成員的類型可以是它所屬的類類型:

class Bar {
 public:
     // ...
 private:
     static Bar mem1; // ok
 };

但是,我很難想象這樣一個功能有用的場景。 我的意思是,為什么你需要一個變量作為類類型? 有人可以給我一些例子嗎? 謝謝。

唯一真正有用的時間是實現“單身人士”模式 (或“簡單”給那些鄙視它的人)。

單身人士是一種可能的用途。 另一種可能的用途是提供一個預先打包的即用型實例。

假設您的類具有昂貴的構造函數,使用大量內存並且您需要創建許多實例。 好消息是大多數情況都是相同的。 您可以使用最廣泛使用的副本靜態,並在需要時重復使用它。

例。 Bar可以用整數構造。 從0構造的實例需求量很大。 保持靜態是一個很好的選擇。

class Bar {
public:
    Bar(int n) : n_bar(n) {
        // if n!=0, construct new instance of Bar, else recycle static instance
    }

    void foo() const { // note, it is const
        if(n_bar==0)
            bar0.foo();
        else {
            // do something
        }
    }
private:
    int n_bar;
    static Bar bar0; // initialize to Bar(0)
};

您也可以根據需要創建一整套靜態實例(使用std :: map,其中int為鍵,Bars為值),而不是一個靜態成員。

獨生子

當你有一些類需要在全局范圍內只有一個實例可用時。 使用全局變量不限制為單個實例,並且可能存在靜態inialization問題

一個字: 單身

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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