此示例代码给出错误,因为没有适当的默认构造函数可用:
class A
{
public:
A(int x)
{
}
};
class B
{
public:
B(int someValue)
{
/* Do a calculation with someValue */
/* Initialize A member with the calculated value */
}
private:
A member;
};
我知道我可以使用初始化列表调用特定的构造函数:
B(int someValue)
: member(someValue)
但问题是我不想用“someValue”创建成员对象,我想首先使用“someValue”计算变量,然后使用结果创建成员对象。
我知道我可以在初始化列表中放置一个公式,但是在我的真实代码中这还不够,因为我需要创建一些其他对象,做一些if语句等等......
我该怎么做?我尝试在A类中插入一个空的默认构造函数,然后在B的构造函数中插入
member = A(calculatedValue);
但是这已经使用默认构造函数创建了成员对象,因此析构函数被调用并且因为尝试删除一些从未初始化的内存而产生错误。
提前致谢