考虑一个使用导入库logging.lib的Windows程序,这样logging.dll将在运行时自动加载/卸载。
另外,请考虑主程序的翻译单元之一,其定义类类型的全局变量如下:
struct InitGuard
{
InitGuard()
{
logging::initialize();
}
~InitGuard()
{
logging::deinitialize();
}
};
InitGuard g_initGuard;
Run Code Online (Sandbox Code Playgroud)
除了更好的方法是InitGuard在函数内实例化这一事实之外main:
InitGuard?InitGuard?是否可以确保 在 调用c'tor时已经加载 logging.dll
InitGuard?
是。在开始运行任何EXE代码之前,OS Loader会解决对静态链接DLL的所有引用。
甚至更重要的是,是否可以保证 在d'tor 返回之前仍不会卸载 logging.dll
InitGuard?
是。在EXE的代码运行完毕之前,操作系统不会释放静态链接的DLL。