如果构造函数抛出异常,那么拥有该类的全局对象是否有意义?

iam*_*ind 8 c++ coding-style exception global-variables

我问这个问题的一般编码指南:

class A {
  A() { ... throw 0; }
};
A obj;  // <---global

int main()
{
}
Run Code Online (Sandbox Code Playgroud)

如果obj在上面的代码中抛出异常,那么它最终main()会在调用之前终止代码.所以我的问题是,我应该为这种情况采取什么指导方针?是否可以为这些类声明全局对象?我应该总是不要自己这样做,还是一开始就抓住错误的好倾向?

sha*_*oth 1

不,您不应该将此类对象声明为全局的 - 任何异常都将无法处理并且很难诊断。该程序只会崩溃,这意味着它将具有非常差(低于零)的用户体验并且相当难以维护。