当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在C++中从静态对象的C'tor抛出/捕获异常》经验,为你挑选了1个好方法。

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

谢谢,加尔



1> Vlado Klimov..:

我假设静态对象具有文件范围(它在任何函数/类定义之外).您可以考虑将其移动到访问器功能并仅通过该功能访问它,如下所示:

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

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

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有