我已经阅读了各种关于不应如何在一个 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/