Тут задался теоритеческим вопросом, какова судьба переменной в С++ коде когда память для нее выделялась CoTaskMemAlloc?
Схема примерно такая:
C++ выделяем память переменной через CoTaskMemAlloc, отдаем переменную в C# управляемый код.
В C# коде, переменная описана как возвращаемая с наружи:
[return: MarshalAs(UnmanagedType.LPWStr)].
Далее, уборщик мусора в C# теоретически должен освободить память этой переменной, когда решит что она более не нужна, но когда он это сделает (и сделает ли) не очевидно.
Так вот в чем вопрос, как в C++ коде понять, освобождена ли память присвоенная этой переменной или ещё нет? Null ей явно присвоен не будет, если я правильно понимаю..
И как я догадываюсь вызывать "возможно вторично" CoTaskMemFree из C++ кода не безопасно.
К сожалению про логику работы связки CoTaskMemAlloc/CoTaskMemFree в разных ситуациях на msdn написано чуть меньше чем ничего..
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости