В 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 без потери памяти (я сохраняю ее только в течение короткого времени). Хотя я не уверен, что мне просто повезло, и это на самом деле незаконно.