C++ выделение и освобождение памяти между модулями (DLL)

Я не особо хорошо понимаю, что в целом подразумевается под "модулем", когда речь идет о программах на C++. DLL считается модулем, сама программа (EXE) тоже модуль. Но что это значит для ОС и для самой программы? В чем заключается граница между этими "модулями", когда DLL подгружена в программу?

И собственно вопрос - насколько правильным будет создавать какие-либо объекты в одном модуле (допустим, на стороне DLL) а уничтожать их в другом модуле (допустим на стороне приложения или даже другой DLL). Может ли это привести к проблемам (если да, то почему), и значит ли это что если какая-то DLL умеет создавать какие-то объекты, то именно она должна заниматься их уничтожением?

Например, есть у моей DLL функция createSomeCoolObject, она создает объект и возвращает указатель на него. Приложение работает с этим объектом, имея в распоряжении полностью виртуальный класс (ISomeCoolObject), а затем берет и уничтожает его, когда нужно, при помощи delete. Можно ли так делать, или правильнее будет написать функцию deleteSomeCoolObject у моей библиотеки, чтобы именно она занималась освобождением выделенной памяти (опять же, если да, то почему)?


Ответы (0 шт):