Из того, что я читал до сих пор, обычно рекомендуется использовать std::shared_ptr
, кучу процесса или функцию-оболочку в самой DLL для освобождения памяти, выделенной в DLL. Это, однако, основано на предположении, что приложение и DLL могут не использовать одну и ту же версию CRT, что может привести к аварийному завершению программы, когда приложение освобождает память, выделенную DLL.
Если DLL явно связана с приложением и обе динамически связаны с кучей CRT с гарантией того, что они имеют одинаковую версию CRT, безопасно ли выделять / освобождать память в соответствии с нормой? (т. е. просто обычный new
/ delete
без каких-либо дополнительных вещей)
Кроме того, безопасно ли освобождать память, выделяемую DLL в приложении, после ее освобождения? (т.е. после звонка FreeLibrary
)