bde*_*ham 3 c++ constructor scope exception-handling try-catch
我有一个类,其构造函数可能会抛出异常.这里有一些代码可以捕获异常:
try {
MyClass instance(3, 4, 5);
}
catch (MyClassException& ex) {
cerr << "There was an error creating the MyClass." << endl;
return 1;
}
Run Code Online (Sandbox Code Playgroud)
但是当然,try/catch之后没有代码可以看到,instance因为它现在超出了范围.解决这个问题的一种方法是分别声明和定义instance:
MyClass instance;
try {
MyClass instance(3, 4, 5);
}
...
Run Code Online (Sandbox Code Playgroud)
除了我的类没有适当的零参数构造函数.事实上,这里的这个案例是唯一一个这样的构造函数甚至有意义的案例:MyClass对象是不可变的,因为它的数据成员在构造之后都没有变化.如果我要添加一个零参数构造函数,我需要引入一些类似的实例变量is_initialized_,然后检查每个方法以确保该变量true在继续之前.对于这样一个简单的模式来说,这似乎太过冗长.
处理这种事情的惯用方法是什么?我是否需要将其填充并允许在初始化之前声明我的类的实例?
Jos*_*eld 11
您应该在块内执行您需要执行的所有操作try:
try {
MyClass instance(3, 4, 5);
// Use instance here
}
catch (MyClassException& ex) {
cerr << "There was an error creating the MyClass." << endl;
return 1;
}
Run Code Online (Sandbox Code Playgroud)
毕竟,它只在已成功创建的try块内instance,因此可以使用.
我想知道你的catch块是否真的处理异常.如果你无法解决问题,你应该让它传播.