Кому принадлежит возвращенный БСТР? - PullRequest
7 голосов
/ 16 мая 2009

Предположим, что метод из интерфейса COM возвращает значение BSTR. Правильно ли я считаю, что должен освободить его?

Пример кода на http://msdn.microsoft.com/en-us/library/aa365382(VS.85).aspx этого не делает.

Кто не прав?

Ответы [ 2 ]

11 голосов
/ 16 мая 2009

Образец MSDN неверен. Звонящий освобождает и вводит / выводит bstrs. Если это вход / выход, вы должны передать NULL или действительный BSTR. Если он отсутствует, его не нужно инициализировать.

Это не очень ясно из правил распределения msdn , но клиентская заглушка распределяет память по выходным значениям, так что с точки зрения вызывающего сервера это сделал. Кто еще может освободить его, кроме звонящего?

9 голосов
/ 16 мая 2009

Тони прав, но я хотел бы расширить его ответ. Ситуация не ограничивается BSTR. Вызывающая сторона ответственна за освобождение любой памяти, которая возвращается через параметры out или in / out.

...