尝试所有或只需要什么?

The*_* do 2 c++

什么是更好的编码实践:如果我必须有一个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尽可能地缩小块 - 不要放入你认为不会导致异常的东西.那样的话,如果你错了并且其中一个"不能引起异常"的部分实际上确实会引起异常,你就不会意外地"吞下"这个令人惊讶的异常(毫无疑问,以不恰当的方式处理它)因为你的代码不会期待那个例外而是其他类型).