Долгоживущие объекты и CoTaskMemAlloc C++ vs C#

127
30 августа 2019, 15:50

Тут задался теоритеческим вопросом, какова судьба переменной в С++ коде когда память для нее выделялась CoTaskMemAlloc?

Схема примерно такая:

C++ выделяем память переменной через CoTaskMemAlloc, отдаем переменную в C# управляемый код.

В C# коде, переменная описана как возвращаемая с наружи:

[return: MarshalAs(UnmanagedType.LPWStr)].

Далее, уборщик мусора в C# теоретически должен освободить память этой переменной, когда решит что она более не нужна, но когда он это сделает (и сделает ли) не очевидно.

Так вот в чем вопрос, как в C++ коде понять, освобождена ли память присвоенная этой переменной или ещё нет? Null ей явно присвоен не будет, если я правильно понимаю..

И как я догадываюсь вызывать "возможно вторично" CoTaskMemFree из C++ кода не безопасно.

К сожалению про логику работы связки CoTaskMemAlloc/CoTaskMemFree в разных ситуациях на msdn написано чуть меньше чем ничего..

READ ALSO
Что лучше выбрать Json.net или DataContractJsonSerializer [закрыт]

Что лучше выбрать Json.net или DataContractJsonSerializer [закрыт]

В общем появился вопрос что лучше использовать для десериализации json Jsonnet или DataContractJsonSerializer в С#

107
Как сортировать строки в большом(2Гб) файле?

Как сортировать строки в большом(2Гб) файле?

Строки разной длины и из разных символов, те

102
Сортировка списка папок по вложенности

Сортировка списка папок по вложенности

Есть список директорий (просто строки), которые необходимо отсортироватьНапример: C:\Program Files\Microsoft C:\Program Files (x86) C:\Program Files

116