我有一個具有GUI成員變量的類。我必須在施工時提供文字,字體和大小。不幸的是,擁有類的構造函數沒有得到這些數據,但必須從工廠(特別是字體)獲取。成員變量的新放置位置
class Element {
public:
Element();
/* other stuff */
private:
UIElement uie;
};
Element::Element() /* cannot construct the object here */ {
/* ... some aquiring ... */
new (&uie) UIElement(/* now I have the required data */);
}
這是一個有效的實施?我是否可以簡單地將物體放置到已建造Element
課程的空間中?
只需使用作業。你的編譯器會優化副本。 – Qix
這看起來不正確的C++代碼 - 你正在新建一個堆棧變量。 –
至少,您需要調用現有的'Element'對象的析構函數。但是這對我來說似乎是很糟糕的設計。爲什麼不只是用'Element'的兩階段施工設計?或者,如果失敗了,則爲成員變量分配一個新的'Element'對象,並讓優化器處理它。 –