在Windows 10,Visual Studio 2017中,我有一个EXE,可在运行时动态加载DLL。它们都是用C ++编写的。
一旦加载了DLL,EXE就会在DLL中调用工厂函数。此工厂函数返回std :: unique_ptr
// Function in the DLL.
std::unique_ptr<T> factory() {
return std::make_unique<DerivedT>();
}
一旦EXE收到std :: unique_ptr,此内存将驻留在哪里?是在DLL的堆中还是在EXE的堆中?可以安全地卸载DLL,并且EXE保留内存并在以后引用该内存吗?
我已经做了一个简单的测试(在一个较大的程序中),似乎可以卸载DLL而不会丢失内存(我只保留了很短的时间)。不过,我不确定自己是否很幸运,这实际上是非法的。