我有一个C ++ DLL项目,它包含一个dllmain源文件,一个只包含DLL函数声明的头文件,一个包含完整函数定义的cpp文件,以及一个指向不同类实例的全局指针。通过调用Init函数初始化此指针,并且所有其余DLL函数都使用指针并返回错误(如果尚未分配)。
除了依赖用户在完成DLL时调用特定函数(这听起来像一个可怕的想法),我如何确保cpp文件中的全局指针被解除分配?
感谢。
答案 0 :(得分:2)
除了依赖用户在完成DLL时调用特定功能(这听起来像一个可怕的想法)
考虑到您已经拥有Init
功能,具有匹配的Free
功能是有道理的。
当用户完成图书馆时,你怎么知道?您可以等到卸载DLL(请参阅DllMain
),但到那时该过程可能仍在结束。
我认为最好的解决方案是完全避免使用全局指针。创建一个包含其他类的实例和方法的类,让用户自己创建一个实例(构造函数替换Init
,析构函数替换Free
)。
答案 1 :(得分:0)
当关闭DLL时,将调用DllMain
,参数为DLL_PROCESS_DETACH
;你可以放置代码来释放你的全局。