class MyClass {
public:
MyClass::MyClass(std::string name) try
: name(std::move(name)),
someOtherField(WillProbablyThrowSomeException()) {
} catch (std::runtime_error &e) {
std::cout << name << " " << e.what() << std::endl;
}
private:
std::string name;
SomeOtherClass someOtherField;
}
我想从构造函数 try 块访问对象的某些字段。如果我只是这样做
name
它将是非法的,因为到达 catch-block 时它已经移动了。如果我这样做 this->name
它也将是非法的,因为该对象处于未定义状态(是吗?)。有没有办法以某种方式访问这个变量?
如果我这样做
它也将是非法的,因为该对象处于未定义状态(是吗?)。this->name
不。数据成员一旦初始化就可以使用。
您可以在稍后定义的成员的初始化程序中使用先前定义的成员的值(请记住,决定初始化顺序的是类声明中的顺序,而不是成员初始化程序列表中的顺序)。