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