我有一个具有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'对象,并让优化器处理它。 –