【问题标题】:C++ drawbacks when inherit from a class exported to a DLL?从导出到 DLL 的类继承时 C++ 的缺点?
【发布时间】:2013-09-09 18:09:50
【问题描述】:

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

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

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

非常感谢!

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    您可以阅读this SO questionthis article 了解更多信息。在处理如何在 dll 中导出类时,This other article 也是一本非常有趣的读物。

    【讨论】:

    • 还有一点:DLL 可以有自己的堆空间。这可能是聚合类的一个大问题(将使用哪个堆空间?)。
    • 是的,我添加了它,尽管它在我链接的上一篇文章中有所介绍。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    • 2010-09-06
    • 2021-05-12
    • 1970-01-01
    • 1970-01-01
    • 2013-07-27
    相关资源
    最近更新 更多