【发布时间】:2015-10-19 09:44:37
【问题描述】:
假设我定义了一个类Foo,它没有实现默认构造函数。
另外,我有一个类Bar,它“拥有”一个Foo的实例:
class Foo() {
private:
int m_member;
public:
Foo( int value ) : m_member(value) { }
};
class Bar() {
private:
Foo m_foo;
public:
Bar( /* ... */ ) {
int something;
/* lots of code to determine 'something' */
/* should initialize m_foo to 'Foo(something)' here */
}
};
显示的代码不会运行,因为Bar 正在尝试调用Foo 的默认构造函数。
现在我要做的是让Bar 的构造函数首先确定something,然后将结果传递给Foo 的构造函数。
解决此问题的一种方法是让Bar 仅拥有指向Foo 的引用/指针,并在确定m_something 后对其进行初始化。但是,我想避免这种情况,以明确 m_foo 的生命周期完全取决于所属类的生命周期。
另一种方法是在Foo 中实现一个默认构造函数并稍后设置该值,我也想避免这种情况,因为Foo 的任何实例都应该具有其成员的有效值(在任何时候) .
实现这一点的正确方法是什么?我在这里被引用/指针卡住了吗?
【问题讨论】:
标签: c++ class constructor initialization member