#c #memory
#c #память
Вопрос:
При запуске моего приложения у него увеличивается объем памяти. Итак, я собрал данные UMDH, и они указывают на приведенный ниже код,
BSTR bstrTestName = strCurTestName.AllocSysString();
BSTR bstrTestInstname = strTestInstName.AllocSysString();
HRESULT hr = g_pDLServiceNetInterop->SetCurTestName(bstrTestName, pCurTestData->GetTestType(), bstrTestInstname, pCurTestData->GetTestMemberCount());
где strCurTestName и strTestInstName являются TString
.
Я не вижу вызова SysFreeString в этом методе.
Я знаю, что если мы передадим BSTR клиенту, он позаботится об очистке памяти. В текущем сценарии это утечка, и мне нужно вызвать SysFreeString или это не утечка.
Ответ №1:
Это утечка. Нам нужно явно устранить это. Вместо BSTR я использовал CComBSTR, и это устранило утечку (да, вызов SysFreeString также устранил утечку).
Ответ №2:
Вы можете вызвать SysFreeString(bstrTestName)
функцию, чтобы освободить строку.
Редактировать: как указано в комментарии, поскольку вы не передаете строку клиенту, как и в случае с любой выделенной памятью, она останется выделенной, если вы не освободите ее с помощью вызова функции SysFreeString.
Комментарии:
1. Я думаю, вопрос в том, нужно ли это делать OP, или должен ли вызываемый ими COM-метод взять на себя ответственность за строку и освободить ее.
2. Да, я передаю строку клиенту, но я не передаю ее как ссылку или указатель. Поэтому я не уверен, нужно ли нам явно ее очищать или метод COM автоматически возьмет на себя ответственность за ее очистку.