假設我需要在我的構造函數初始化任何成員變量之前調用一個空閒的GlobalInitializer()。例如:C++重構:初始化在構造函數中排序
class Foo {
public:
Foo() : bar_()
{
// calling GlobalInitializer() here is too late
}
Bar bar_;
};
在Foo中調用GlobalInitializer()已經太晚了,因爲我需要在bar_初始化之前調用它。我哈克解決有關此已經創造超一流:
class MyInitializer {
protected:
MyInitializer() {
GlobalInitializer();
}
};
class UglyFoo : public MyInitializer
{
public:
UglyFoo() : bar_()
{ }
Bar bar_;
};
UglyFoo幹得不錯,但它需要這種醜陋MyInitializer類。是否有更清晰的設計模式或重構來達到相同的效果?
附加說明:除非用戶實例化Foo(),GlobalInitializer()是一個昂貴的調用,我想避免。 GlobalInitializer()中有多個警戒對多個呼叫。此外,可能還有其他類,比如說FooBar,它也需要調用GlobalInitializer(),但是在一個進程中,GlobalInitializer()實際上只會執行一次(如果Foo或FooBar被實例化),或者甚至不會執行一次(如果沒有Foo或FooBar的實例化)。
名字'GlobalInitializer'表明,它僅需要調用一次,而不是每次都Foo'的'一個實例創建。那是對的嗎? –
我想我可能在那裏選擇了一個壞名字 - 它只需要被調用一次,但只有創建Foo()的實例時(GlobalInitializer內部有多個警戒對多個調用)。這是我希望從Foo的用戶那裏得到的實現細節。 – kfmfe04