gpt4 book ai didi

c++ - 从 C++ 中静态对象的 C'tor 抛出/捕获异常

转载 作者:太空狗 更新时间:2023-10-29 19:40:08 24 4
gpt4 key购买 nike

我有一个案例,我必须在 C'tor 中读取一个输入文件,但有时这个文件不存在。这个对象通常是静态保存的,所以它的 C'tor 在加载 dll 时被调用。如果文件不存在,我无法捕获我抛出的异常,因为它太早了,而且我的可执行文件以一种丑陋的方式崩溃了。我知道从 C'tor 中抛出异常是不好的做法,但如果文件不存在我就无法继续,所以我必须这样做。有没有办法在加载dll时捕获异常,如果没有,对于这种情况有没有更好的解决方案?

谢谢,加尔

最佳答案

我假设静态对象具有文件作用域(它在任何函数/类定义之外)。您可以考虑将其移至访问器函数并仅通过该函数访问它,如下所示:

class Object;
Object& getObject()
{
static Object object;
return object;
}

Object 的静态实例将在第一次调用 getObject() 方法时初始化。如果 Object 的构造函数抛出异常,您可以轻松捕获异常。只是你需要记住将 getObject() 的每次调用都包装到一个 try/catch block 中(否则会遇到在堆栈链中冒泡的异常);这可能有点不方便,但另一方面,如果您知道程序逻辑流中的第一个调用,您可以决定只包装逻辑上的“第一个”调用。

关于c++ - 从 C++ 中静态对象的 C'tor 抛出/捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/556655/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com