Seb*_*ann 7 c++ constructor class member-initialization
我在自己的类中有一个A类成员,构造函数接受多个参数.我将我自己的类的参数转发给A类的构造函数.但重要的是这些参数是正确的,所以我需要在构建A的成员之前检查它们.并且继承问题:我可以省略成员中的成员初始化列表,有效地调用默认构造函数.在构造函数中检查之后,我可以在一个分配中调用A的构造函数.虽然,这会产生错误,因为A的析构函数是私有的.
我该如何解决这个问题?
MyClass::MyClass(int someParam) : otherMember(2){
//checks for someParam
member = A(someParam); // <- produces error
}
Run Code Online (Sandbox Code Playgroud)
bdo*_*lan 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();
}
Run Code Online (Sandbox Code Playgroud)
请注意,,使用的是逗号运算符,而不是参数分隔符 - 它会计算左右表达式,并抛弃左侧的结果.