mad*_*ax1 4 c++ constructor initialization class member
假设我定义了一个类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 */
}
};
Run Code Online (Sandbox Code Playgroud)
显示的代码将无法运行,因为它Bar正在尝试调用默认构造函数Foo.
现在我要做的是先让构造函数Bar确定something,然后将结果传递给构造函数Foo.
解决此问题的一种方法是在确定之后Bar仅拥有一个引用/指针Foo并对其进行初始化m_something.但是,我想避免这一点,以明确生命周期m_foo完全取决于拥有类的生命周期.
另一种方法是实现一个默认构造函数Foo并稍后设置该值,我也想避免,因为任何实例都Foo应该为其成员提供有效值(在任何时候).
实现这个的正确方法是什么?我在这里坚持使用参考/指针吗?
For*_*veR 12
最好的想法是创建辅助函数,它将计算一些东西然后只m_foo在构造函数初始化列表中初始化.
class Bar {
private:
Foo m_foo;
public:
Bar( /* ... */ ) : m_foo(calculate_something()) {
}
private:
static int calculate_something()
{
int something = 0;
// lot of code to calculate something
return something;
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
172 次 |
| 最近记录: |