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