Я хочу создать dll, используя c++, который имеет функцию, которая создает изображение.bmp, создавая массив с использованием c++ new
, заполняя его, а затем возвращая указатель. Я хочу использовать эту функцию в проекте aС#, но как мне удалить этот массив после его использования?
я создаю другую функцию в своей dll, которая получает указатель и delete[]
его?
или существует способ прямого удаления массива в С#?
или С# автоматически удаляет его, когда он выходит из области видимости?
вам нужно создать другую функцию для удаления указателя. С# не будет автоматически удалять его, когда он выходит из области видимости, и есть некоторые методы, которые Microsoft предоставляет для удаления объектов, но они предназначены для ручек Windows. Пример: Marshal.FreeHGlobal.
С# (.NET) автоматически не удаляет указатель (освобождение выделенной памяти), если ваша dll содержит unmanaged code
. Освобождение неуправляемых ресурсов - ваша ответственность (.NET может сделать это за кулисами для вас, если сам создаст и использует любой неуправляемый ресурс, но ваш случай не тот же). Однако, даже если вы вручную освободите эти ресурсы (выделенная память в вашем случае), вам следует рассмотреть возможность предоставления настраиваемых методов в вашей dll вместо вызова delete непосредственно в части вызывающего абонента. Смешение разных версий и сред CRT не является хорошей практикой. Чтобы узнать, почему, пожалуйста, перейдите по этой ссылке. Лучше написать пользовательский allocater/deallocater в вашей DLL и использовать их для управления объектами.