Маршаллинг между C # и C ++ и жонглирование обязанностями - PullRequest
1 голос
/ 02 сентября 2010

что, если бы у меня была встроенная функция C ++, в которой, в зависимости от результата функции, ответственность за удаление определенного указателя (delete []) различается между вызывающей стороной и функцией. Я, конечно, проверил бы возвращаемое значение и действовал бы соответственно в C ++.

Вопрос в том, что, если функция была распределена между C ++ и C #, будет ли достаточно установить нулевой указатель в C #?

Ответы [ 2 ]

3 голосов
/ 02 сентября 2010

Нет. C # не может делать то, что делает delete [] в C ++. Вам нужно будет использовать API распределения общей памяти или написать оболочку C ++, которая будет выполнять очистку.

0 голосов
/ 02 сентября 2010

Нет, просто установка указателя, выделенного в собственном коде на null, не освободит память. CLR может только собирать мусор памяти, о которой он знает (он же управляемая память). Он не имеет представления о родной памяти и, следовательно, не может ее собрать. Любая встроенная память, которая владеет управляемым типом, должна быть явно освобождена.

Наиболее распространенный способ сделать это - использовать функции Alloc и Free в Marshal классе

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...