c++ - 跨 DLL 边界抛出 C++ 异常

标签 c++ dll exception-handling

我已经阅读了各种关于不应如何在一个 DLL 中分配堆内存并从该 DLL 外部释放它的内容。但是抛出一个只是临时的异常对象(就像大多数异常对象一样)呢?例如:

throw my_exception( args ); // temporary: no heap allocation

当异常对象在 DLL 之外被捕获时,该对象的析构函数最终将被执行,并且该对象的非堆内存将被回收。因为它不是堆内存,所以可以吗?

最佳答案

只有当所有模块都使用相同的 C++ 运行时,才可能跨 DLL 边界抛出 C++ 异常,在这种情况下,它们也共享一个堆。但这可能是一个维护负担,尤其是在涉及多个供应商的库时,因此不鼓励这样做。

如果您想要跨多个编译器/编译器版本/编译器设置可移植的错误处理,请使用返回码或操作系统提供的异常(例如 Windows 上的 SEH)/

关于c++ - 跨 DLL 边界抛出 C++ 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5107948/

相关文章:

java - Spring 3.1 DefaultHandlerExceptionResolver 覆盖/禁用

c++ - C++通过迭代器确定变量类型

c++ - 如何在std命名空间中引入一个struct

c++ - 有人可以解释 "- ' 0' "

c++ - VS2010 : Add company name,等到一个DLL

c++ - 使用 DLL 时在应用程序中包含 .lib 文件

c++ - 为什么赋值运算符重载会创建一个对象的拷贝?

debugging - 如何将 C++Builder 应用拆分为 DLL

asp.net - Application_error函数间歇性地捕获 "File does not exist"

java - 为什么 "catch" block 一定需要异常类型?