如果全局变量的声明抛出异常,如何退出 C++ 程序?
How to exit a C++ program if the declaration of a global variable throws an exception?
我有一个程序,我需要一个 class 的实例是全局的(它是常量),但是 class 的构造函数需要一个特定的文本文件存在(如果它不存在程序应该退出)。如果我在构造函数中抛出一个异常,它就不能在构造函数之外被捕获,因为我不能在一个函数之外有一个 try{ }catch{ } 块,我需要为 [=14= 的实例做这些] 是全球性的。
如果全局变量的声明抛出异常,如何使用异常来确保内存仍然被清理?
首先不用担心内存问题
如果全局构造函数抛出异常,则说明您的程序存在时间不够长,所以它已经在退出了。
接下来,如果您真的坚持,只需确保所有全局对象的析构函数也能够销毁所有关联的资源,因为无论如何它们都应该能够为 RAII 工作。
如果一个对象只是部分构造的,所有对应于成功完成的成员(和基础)ctors 的 dtors 都将被调用,所以确保你的 ctor 在投掷时不会泄漏任何东西应该不会太难。
我有一个程序,我需要一个 class 的实例是全局的(它是常量),但是 class 的构造函数需要一个特定的文本文件存在(如果它不存在程序应该退出)。如果我在构造函数中抛出一个异常,它就不能在构造函数之外被捕获,因为我不能在一个函数之外有一个 try{ }catch{ } 块,我需要为 [=14= 的实例做这些] 是全球性的。
如果全局变量的声明抛出异常,如何使用异常来确保内存仍然被清理?
首先不用担心内存问题
如果全局构造函数抛出异常,则说明您的程序存在时间不够长,所以它已经在退出了。
接下来,如果您真的坚持,只需确保所有全局对象的析构函数也能够销毁所有关联的资源,因为无论如何它们都应该能够为 RAII 工作。
如果一个对象只是部分构造的,所有对应于成功完成的成员(和基础)ctors 的 dtors 都将被调用,所以确保你的 ctor 在投掷时不会泄漏任何东西应该不会太难。