后我有以下代码: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移动到该列表。还有一个问题,因为我想了解我在做什么:requestcontexes.push_front(cpContext),将元素的副本添加到全局声明的列表中?不是对cpContext的引用? – 2012-02-21 15:20:04
是的。不要忘记使用锁来保护这个列表,因为它可能被多个线程同时访问。 – 2012-02-21 15:23:20