我知道如果我希望其他编译器能够与它们通信,则允许导出全局函数,类C结构和纯虚拟接口抛出DLL。
另外我知道在DLL端分配的内容必须在DLL端解除分配。通常人们会创建删除函数,例如:
class IA
{
public:
virtual a() = 0;
};
DLL_EXPORT IA* GetA();
DLL_EXPORT void DeleteIA(IA* ia);
实现规则"删除创建的位置"。但据我所知,如果接口具有虚拟析构函数,则可以避免删除:
//dllheader.h
class IA
{
public:
virtual ~IA() {}
virtual a() = 0;
};
DLL_EXPORT IA* GetA();
//executable main
int main()
{
IA* p = GetA();
p->a();
delete(p);
}
因此,在客户端,只为内存分配指针,当我们调用delete(p)时,它调用析构函数(在DLL中实现,因此,应该正确工作),然后释放指针的内存。 我对吗?谁能澄清那里发生了什么?