什么是更好的编码实践:如果我必须有一个try/catch块,我应该将所有内容(每次初始化等)放在这个块中,还是只放置那些可能抛出的变量?这两种结构有什么区别吗?
例如:
拥有:
struct A {
A();
int a;
int* b;
};
Run Code Online (Sandbox Code Playgroud)
然后在.cpp中:
A::A() {
a = 5;
try {
b = new int;
}
catch(...){
}
}
Run Code Online (Sandbox Code Playgroud)
要么
A:A() {
try {
a = 5; //this time in try block
b = new int;
}
catch(...) {
}
}
Run Code Online (Sandbox Code Playgroud)
这两个结构之间是否有任何区别,或者如果我必须有一个try/catch块,我可能会把所有内容放入其中吗?谢谢.
PS为了上帝的缘故,这里的格式化让我真的很疯狂!而且我知道我多次提到这一点,我不会生气.
Ale*_*lli 10
我认为一个好的一般原则是try尽可能地缩小块 - 不要放入你认为不会导致异常的东西.那样的话,如果你错了并且其中一个"不能引起异常"的部分实际上确实会引起异常,你就不会意外地"吞下"这个令人惊讶的异常(毫无疑问,以不恰当的方式处理它)因为你的代码不会期待那个例外而是其他类型).