从导出到DLL的类继承C ++有什么缺点?

时间:2013-09-05 19:19:41

标签: c++ inheritance dll visual-studio-2005

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

到目前为止,我看不出这个解决方案有任何明显的缺点。替代方法是制作CLASS_A的副本并将其放在LIB2中,因此CLASS_B可以继承它,但我想避免使用该解决方案,因为我希望避免使用2个不同版本的“相同”基类。 / p>

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

非常感谢!

1 个答案:

答案 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 questionthis article了解详情。在处理如何在dll中导出类时,This other article也是一个非常有用的读物​​。