我正在尝试使我的 C++ 代码异常安全,但遇到了一个问题,无论是询问朋友还是搜索网络都无济于事。
据我了解,当使用构造函数创建对象时可能会引发异常,创建代码需要用try
块括起来,异常处理在catch(){}
.
如果创建是基于堆的(例如new
,使用默认分配器编辑),我可以将异常处理代码放置在创建附近,如下所示:
void f() {
// work unrelated to Hoge object here
try {
Hoge *pHoge = new Hoge(); // could throw an exception
} catch(HogeException& ex) {
// handle exception
}
// rest of work here
}
但是,如果创建是基于堆栈的,由于块的范围,我找不到这样做的方法并求助于下面的代码try
:
void g() {
// work unrelated to Hoge object here
try {
Hoge hoge; // could throw an exception
// rest of work here
} catch(HogeException& ex) {
// handle exception
}
}
如果// rest of work
上面的代码很大,对象创建和异常处理之间的位置距离可能会很长,从而降低代码的可读性......
我更喜欢异常处理代码靠近对象创建(也许这是结构的概念之一try
)catch
。有什么解决办法吗?