我有一个类,其构造函数大致如下:
class B;
class C;
class D;
class A{
private:
B b;
C c;
public:
A(istream& input){
D d(input) // Build a D based on input
b = B(d); // Use that D to build b
c = C(d); // and c
}
}
只要B
和C
具有默认构造函数,就可以正常工作。
我的问题是B
没有,所以我需要在初始化列表中初始化b
。
但这是一个问题,因为我需要在计算d
和b
之前构建c
。
一种方式是:
A(istream& input):b(D(input)),c(D(input)){}
但构建D
(非常)代价高昂(*)
解决此问题的方法是什么?
(*)另一个问题是,如果b
和c
需要从同一个实例构建(如果D
的构造函数是随机的,或者其他什么)。但这不是我的情况。
答案 0 :(得分:4)
在C ++ 11中,您可以使用delegating constructors:
class B;
class C;
class D;
class A
{
private:
B b;
C c;
public:
explicit A(istream& input)
:
A(D(input))
{
}
// If you wish, you could make this protected or private
explicit A(D const& d)
:
b(d),
c(d)
{
}
};