从导出到 DLL 的类继承时C++缺点
C++ drawbacks when inherit from a class exported to a DLL?
我有几个库,每个库都编译为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 中导出类时,另一篇文章也是一篇非常有趣的读物。
相关文章:
- 继承函数的重载解析
- 继承期间显示未知行为的子类
- 头文件-继承c++
- 为什么在保护模式下继承升级不起作用
- 通过继承类使用来自不同命名空间的运算符
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 混合组合和继承的C++问题
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 从类继承时,继承的类是否会通过父类重新定义继承的变量
- 公共与私人继承
- 如何创建从同一类继承的不同对象的向量
- 如何从另一个文件继承私有成员变量和公共函数
- 在模板基类中为继承类中的可选重写生成虚拟方法
- 带有继承的C++工厂
- 我应该避免多重实现继承吗
- C++继承更改成员
- 从具有默认值的部分指定模板类继承时发生SWIG错误,具有不带默认值的正向声明
- 关于C++中具有多重继承"this"指针的说明
- 尝试使用继承和模板实现CRTP.Visual Studio正在生成编译器错误
- 如何在QT Creator上将QWidget声明为继承类的对象