У меня есть следующий код:C++ переменных после завершения функции
void SendRequest(HINTERNET connection, LPCWSTR method, LPCWSTR referer,LPCWSTR path,WINHTTP_STATUS_CALLBACK whCallback){
HINTERNET request;
request=WinHttpOpenRequest(connection, 0,path,0,referer,WINHTTP_DEFAULT_ACCEPT_TYPES,0);
WinHttpSetStatusCallback(request, (WINHTTP_STATUS_CALLBACK)whCallback,WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS,0);
REQUEST_CONTEXT cpContext;
WinHttpSendRequest(request,WINHTTP_NO_ADDITIONAL_HEADERS,0,NULL,NULL,NULL,(DWORD_PTR)&cpContext);
};
WinHttpSendRequest не блокирует, поэтому, когда он выполняется, то функция заканчивается. Тем не менее, WinHttpSendRequest обращается к другой функции с помощью cpContext в качестве параметра. Поэтому мой вопрос: doe cpContext уничтожается после завершения функции? Это приводит к утечке памяти, так как нет доступа к cpContext вне функции? Как я могу сделать это в лучшей практике на C++?
Итак, чтобы исправить обе проблемы, я могу добавить глобальный список типа структуры REQUEST_CONTEXT и переместить HINTERNETHANDLE в этот список. Еще один вопрос, потому что я хочу понять, что делает im: requestcontexes.push_front (cpContext), добавляет копию элемента в список, объявленный глобально? не ссылка на cpContext? –
Да. Не забудьте использовать блокировку для защиты этого списка, так как к нему могут одновременно обращаться несколько потоков. –