gpt4 book ai didi

c++ - 导出类的客户端未使用 dllimport 时出现问题?

转载 作者:太空宇宙 更新时间:2023-11-04 12:28:37 25 4
gpt4 key购买 nike

除了方法调用没有优化外,还有其他问题吗?

我注意到的一个区别是类中默认编译器生成的方法(例如 operator=)出现在导出的 dll 中(如果客户端使用 dllimport)或客户端二进制文件中(如果未使用 dllimport)。在后一种情况下,类的一部分几乎是在 dll 中定义的,一部分是在客户端的二进制文件中定义的。这有什么问题吗?

最佳答案

我假设在这两种情况下,类实现都驻留在 DLL 中,对吗?

我在这种情况下看到的主要问题是,如果编译器生成的赋值运算符分配任何内存,即使是间接调用其他复制构造函数或赋值运算符,内存也可能会分配到“错误的”堆中(客户端的堆而不是 DLL 的堆,如果赋值运算符驻留在 DLL 中,它们将被分配到这里)。这可能导致内存泄漏和偶尔难以调试的问题。

就是说,如果您的对象“足够琐碎”以至于您真的不需要编写自己的复制构造函数和赋值运算符(和析构函数 - 请参阅 rule of three),那么您很可能会这样做,尤其是如果您只是扔几个 POD。

关于c++ - 导出类的客户端未使用 dllimport 时出现问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/418879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com