从导出到 DLL 的类继承时C++缺点

C++ drawbacks when inherit from a class exported to a DLL?

本文关键字:继承 C++ 缺点 DLL      更新时间:2023-10-16

我有几个库,每个库都编译为DLL,它们被一些应用程序使用。我刚刚在其中一个库 (LIB_1) 中开发了一个类 (CLASS_A),该类继承自另一个库 (LIB_2) 中存在的类 (CLASS_B),因此,它被编译为另一个 DLL。

到目前为止,我看不到此解决方案的任何明显缺点。另一种方法是复制CLASS_A并将其放在 LIB2 中,这样CLASS_B就可以从中继承,但我想避免该解决方案,因为我想避免拥有 2 个不同版本的"相同"基类。

¿从 DLL 中的类继承有什么重要的缺点吗?

多谢!

在设计说明上,没有真正的问题。依赖树稍微复杂一些,例如,如果主程序直接同时使用类 A 和 B:

EXE
 +--------+
 v        v
LIB_1    LIB_2
 |
 v
LIB_2

主要问题是二进制兼容性。除非您使用纯虚拟接口,否则您的库将只能与使用相同版本的相同编译器、兼容设置(即兼容的编译器选项)制作的可执行文件或 dll 一起使用。

除了二进制兼容性外,dll 通常还可以有自己的堆空间。即使使用纯虚拟接口,您也需要注意 dll 中使用了哪个 CRT(如果 dll 分配内存,则只有这个 dll 应该释放它,因此相同的 CRT 用于 malloc/free)。

您可以阅读此SO问题和本文以获取更多信息。在处理如何在 dll 中导出类时,另一篇文章也是一篇非常有趣的读物。