Утечка памяти для CComBSTR

Используя обоих экстенсивно, я думаю, что Wedge был на деньгах в замечании "TFS, включает отслеживание ошибок, отслеживание объекта работы и другие функции вне управления исходным кодом".

Однако я могу честно сказать, что SVN и TFS кажутся довольно равными в отношении масштабируемости, и если что-нибудь управление исходным кодом SVN имеет преимущество на TFS из-за его свойственной простоты.

, Если Вы хотите объект работы и отслеживание ошибок вместе с Вашим управлением исходным кодом тогда Вы или идете для TFS или Вы идете с SVN и некоторым другим, возможно свободным, инструменты, такие как Bugzilla. В то время как TFS действительно интегрирует и управление исходным кодом и объект работы, отслеживающий вместе, я честно думаю, что MS должен был отдать его даром как извинение за злоупотребление такого количества разработчиков с VSS за эти годы.

7
задан sharptooth 17 November 2009 в 06:10
поделиться

2 ответа

Утечка, потому что get_Bar () и get_Baf () не знают, что вы используете CComBSTR.

Когда вы берете адрес CComBSTR, то, что вы фактически передаете базовому объекту, является указателем на член BSTR CComBSTR.

Разрыв последовательности :

CComBSTR str;

Это инициализирует внутренний BSTR равным NULL.

pFoo->get_Bar(&str);

get_Bar () видит BSTR * и заполняет его фактическими данными. Примерно так:

HRESULT get_Bar(BSTR* arg) { *arg = SysAllocString(L"My String"); }

Теперь внутренний BSTR str является настоящим BSTR. Когда CComBSTR выходит за пределы области видимости, он удаляет член str .

Теперь, если вы вызовете get_Baf () на & str, проблема в том, что CComBSTR не знает, что вы меняя строку.

11
ответ дан 6 December 2019 в 14:05
поделиться

Вероятно, вы читали об этом на этой странице Microsoft:

http://msdn.microsoft.com/en-us/library/bdyd6xz6.aspx

Проблемы с утечкой памяти

Передача адреса инициализированного CComBSTR в функцию в качестве параметра [out] вызывает утечку памяти.

Объект CComBSTR распределяет память внутри. Видно, есть случаи, когда он его не выпускает.

4
ответ дан 6 December 2019 в 14:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: