在某些情况下 - 特别是在堆栈展开期间异常逃逸时 - C++运行时会调用
那么如果C++代码在库中,使用该库的程序不是C++呢?这种情况经常发生 - 例如,我可能有一个本地的C++ COM组件,被.NET程序使用。一旦组件代码内部调用
在开发C++库时,如何处理后一种情况?
terminate()
,它必须在死后做一些合理的事情,然后退出程序。当出现“为什么这么严厉”的问题时,通常的答案是“在这种错误情况下没有更合理的做法”。如果整个程序都在C++中,这听起来很合理。那么如果C++代码在库中,使用该库的程序不是C++呢?这种情况经常发生 - 例如,我可能有一个本地的C++ COM组件,被.NET程序使用。一旦组件代码内部调用
terminate()
,.NET程序突然异常终止。程序作者首先会想“我不关心C++,为什么这个库让我的程序退出?”在开发C++库时,如何处理后一种情况?
terminate()
意外地结束程序是否合理?是否有更好的方法来处理这种情况?
terminate()
或任何被定义为调用terminate()
的操作。对于exit()
、abort()
、触发SIGKILL或未定义行为,不适用相同的问题吗?如果您的文档说明函数会返回,但它没有返回,则存在错误。程序作者首先应该想“为什么这个库会导致我的程序退出”,然后追查您并要求复仇是正确的。 - Steve Jessopterminate()
- C++ 运行时会调用。 - sharptooth