我有一个类,其构造函数大致执行以下操作:
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
需要从同一个实例构建(例如 ifD
的构造函数是随机的或其他)。但这不是我的情况。