我有一些库,每个库都编译为DLL,并且它们被某些应用程序使用。我刚刚在其中一个库(LIB_1)中开发了一个类(CLASS_A),它继承自另一个库(LIB_2)中存在的类(CLASS_B),因此,它被编译为另一个DLL。
到目前为止,我看不出这个解决方案有任何明显的缺点。替代方法是制作CLASS_A的副本并将其放在LIB2中,因此CLASS_B可以继承它,但我想避免使用该解决方案,因为我希望避免使用2个不同版本的“相同”基类。 / p>
¿从DLL中的类继承有什么重要的缺点吗?
非常感谢!
答案 0 :(得分:4)
在设计说明中,没有真正的问题。依赖树只是有点复杂,例如,如果主程序直接使用类A和B:
EXE
+--------+
v v
LIB_1 LIB_2
|
v
LIB_2
主要问题是二进制兼容性。除非您使用的是纯虚拟接口,否则您的libs将是可继承的,只能与使用相同编译器的相同版本的可执行文件或dll一起使用,并具有兼容的设置(即兼容的编译器选项)。
除了二进制兼容性,dll通常也可以拥有自己的堆空间。即使使用纯虚拟接口,您也需要注意在dll中使用哪个CRT(如果dll分配内存,这个只有这个dll应该释放它,因此相同的CRT用于malloc / free)。
您可以阅读this SO question和this article了解详情。在处理如何在dll中导出类时,This other article也是一个非常有用的读物。