繁体   English   中英

是否应该在Windows DLL库中导出析构函数?

[英]Should destructors be exported in Windows DLL Libraries?

在生成Windows DLL动态库时,系统会要求您声明应导出哪些函数,以便某些函数可能保留为DLL专用而其他应用程序无法访问。

我还没有看到有关是否需要导出析构函数或是否由编译器或Windows内核自动处理的任何内容? 如果我不导出析构函数并且它们动态分配我声明为可导出的类,如果不导出析构函数,它们是否可以成功调用delete?

通常,任何带有构造函数的类都应该导出析构函数。

话虽这么说,但有几件事要警惕......

如果您在Windows上构建,则需要注意将VS版本与库混合。 如果您只是将您的库作为DLL分发,那么导出构造函数和析构函数是个坏主意。 问题出在C ++运行时。 几乎需要处理内存分配的相同运行时需要处理释放。 例如,当您尝试在VS 2008中使用在VS 2005中编译的库时,这是“坏事”的首要原因。

解决方案是提供工厂方法来创建类(分配由您编译的运行时处理)以及删除/破坏类的方法(因此解除分配在同一运行时发生)。

如果析构函数不可用但需要,编译器应该生成错误。 作为一般规则,如果导出构造函数,那么析构函数也应该是。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM