我想在特定實例的構造函數中初始化靜態成員變量。這是一個壞主意嗎?在實例的構造函數中初始化靜態成員
情況如下。我有一個靜態成員變量,這個類的所有實例應該共享。通常,我只是使用靜態初始化器。但是,在構造函數被調用之前,我沒有構造靜態對象所需的必要信息。但是當然,我不想在每次構造函數被調用時創建一個新對象,所以我想要做這樣的事情。
class Foo
{
static Bar * bar;
Foo(Xyz xyz);
};
Bar * Foo::bar = nullptr;
Foo::Foo(Xyz xyz)
{
if (Foo::bar == nullptr)
{
// initialize static bar
Foo::bar = new Bar(xyz);
}
}
我當然知道xyz
的migth是不同的調用的Foo
構造不同。這對我來說並不重要。
這是不好的軟件設計嗎?我感覺有點奇怪,在構造函數中初始化一個靜態對象。但這與單件設計模式沒有什麼不同。所以也許它沒關係?
編輯
感謝您的意見傢伙。人們似乎並不喜歡這種設計。我將對其進行修改,以便在Foo
的第一個實例化之前創建一個Bar
,並在Foo
的構造函數中將Bar *
作爲參數傳遞。每個Foo
將有一個指向Bar
的指針,我將確保所有Foo
都指向相同的Bar
。那個更好嗎?
請注意,你不會做初始化。你將會做任務。 – NathanOliver
如何獲得應該用於_initialization_的值?它僅在運行時纔可用嗎?順便說一句,你的樣本不會編譯。 –
單線看起來沒問題。多線程競爭條件。 –