Вы не можете, вы не представляете, какой распределитель использовался неуправляемым кодом для создания экземпляра CString. Более того, вам нужно вызвать деструктор CString, вы не можете получить его адрес.
Вы мертвы в воде, если этот объект CString возвращается как возвращаемое функцией значение функции C ++, которую вы вызываете из C #. Это не ясно из вашего вопроса. У вас будет неуправляемая утечка памяти. Для решения этой проблемы потребуется оболочка, написанная на C ++ / CLI. Строки, возвращаемые как возвращаемые значения функции, должны быть выделены CoTaskMemAlloc () для правильной очистки маршалером P / Invoke. Ни один код C ++ никогда этого не делает.