我问这个问题是为了获得一般的编码指南:
class A {
A() { ... throw 0; }
};
A obj; // <---global
int main()
{
}
如果 obj
在上面的代码中抛出异常,它最终会在调用 main()
之前终止代码。所以我的问题是,对于这种情况我应该采取什么指导方针?是否可以为此类类声明全局对象?我应该始终克制自己不这样做,还是从一开始就发现错误是一种很好的趋势?
最佳答案
如果您需要一个其构造函数可以抛出的对象的全局实例,您可以将变量设为静态,而不是:
A * f(){
try {
//lock(mutex); -> as Praetorian points out
static A a;
//unlock(mutex);
return &a;
}
catch (...){
return NULL;
}
}
int main() {
A * a = f(); //f() can be called whenever you need to access the global
}
这将缓解由过早异常引起的问题。
编辑:当然,在这种情况下,解决方案是成为单例的 90%。为什么不通过将 f()
移动到 A
来将它完全变成一个?
关于c++ - 如果构造函数抛出异常,那么拥有该类的全局对象是否有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6984156/