iQ.*_*iQ. 3 c++ dll shared-libraries
在生成Windows DLL动态库时,系统会要求您声明应导出哪些函数,以便某些函数可能保留为DLL专用而其他应用程序无法访问.
我还没有看到有关是否需要导出析构函数或是否由编译器或Windows内核自动处理的任何内容?如果我不导出析构函数并且它们动态分配我声明为可导出的类,如果不导出析构函数,它们是否可以成功调用delete?
通常,任何带有构造函数的类都应该导出析构函数.
话虽这么说,但有几件事要警惕......
如果您在Windows上构建,则需要注意将VS版本与库混合.如果您只是将您的库作为DLL分发,那么导出构造函数和析构函数是个坏主意.问题出在C++运行时.几乎需要处理内存分配的相同运行时需要处理释放.例如,当您尝试在VS 2008中使用在VS 2005中编译的库时,这是"坏事"的首要原因.
解决方案是提供工厂方法来创建类(分配由您编译的运行时处理)以及删除/破坏类的方法(因此重新分配在同一运行时发生).