我在自己的类中有一个A类成员,构造函数接受多个参数。我将我自己的类的参数转发给A类的构造函数。但重要的是这些参数是正确的,所以我需要在构造A的成员之前检查它们。并且继承问题: 我可以省略成员初始化列表中的成员,有效地调用默认构造函数。在构造函数中检查之后,我可以在一个分配中调用A的构造函数。虽然,这会产生错误,因为A的析构函数是私有的。
我如何解决这个问题?
MyClass::MyClass(int someParam) : otherMember(2){
//checks for someParam
member = A(someParam); // <- produces error
}
答案 0 :(得分:10)
无论你做什么,你都需要一个可访问的析构函数。但是要解决您的问题,一个选项是调用静态函数来检查初始化程序中的参数:
class MyClass {
private:
static void checkParam(int);
// ...
};
MyClass::MyClass(int someParam) : otherMember( (checkParam(someParam), 2) ) {
// ...
}
static void MyClass::checkParam(int someParam) {
if (...) throw someException();
}
请注意,那里使用的,
是逗号运算符,而不是参数分隔符 - 它会计算左右表达式,并抛弃左边的结果。
答案 1 :(得分:0)
我认为有两种方法可以解决这个问题:
确保类A
可以与无参数构造函数一起使用,并在单独的方法中设置someParam
:A.SetSomeParam(someParam)
不是从A
继承,而是持有A
类型的成员对象,然后您可以随时构建它。