What is needed to clean up CInternetSession

The MSDN documentation for CInternetSession::Close()only

Call this member function when your application has finished using the object CInternetSession.

MSDN for CInternetSession :: Close

For the object CHttpConnectionbeing returned CInternetSession::GetHttpConnection()and the object CHttpFilebeing returned CHttpConnection::OpenRequest(), should they be manually closed and deleted?

I cannot find the documentation for CHttpConnection::Close()on MSDN, but CHttpFileinherits my method Close()from CInternetFile; documentation for which is also useless:

Closes a CInternetFileand frees any of its resources.

(sorry, I cannot have three links)

My guess would be that with CInternetSession::GetHttpConnection()and CHttpConnection::OpenRequest()return pointers, and since MSDN for CHttpConnectionsays

CHttpConnection ; , CInternetSession::GetHttpConnection, CHttpConnection .

(, )

CInternetSession CHttpConnection, , CInternetSession::Close(). MSDN, -

CInternetSession → .

:

CInternetSession session(...);
CHttpConnection * connection = session.GetHttpConnection(...);
CHttpFile * file = connection->OpenRequest(...);

... Do stuff ...

file->Close();
delete file;

connection->Close();
delete connection;

session.Close();

:

CInternetSession session(...);
CHttpConnection * connection = session.GetHttpConnection(...);
CHttpFile * file = connection->OpenRequest(...);

... Do stuff ...

session.Close();

-

--- --- , , ? , Valgrind , , ?

+4
1

: Close(), MFC. .

MFC , . WinINet :

MSDN WinINet

, ::InternetOpen InternetCloseHandle. MFC :

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\src\mfc\inet.cpp

CInternetSession(){
    ::InternetOpen //WinINet
    ...
}

CInternetSession::Close(){
    ::InternetCloseHandle //WinINet
    ...
}

CInternetSession::~CInternetSession(){
    Close();
}

internetSession.Close(), . . , CInternetSession - , Close(), .

Close, .

CHttpFile * file = connection->OpenRequest(...);
file->Close();//I think this is okay but not necessary because we "delete file" in next line
delete file;//calls Close(); and other necessary cleanups

:

CInternetSession session(...);
CHttpConnection *connection = session.GetHttpConnection(...);
CHttpFile *file = connection->OpenRequest(...);
//... Do stuff ...
delete file;//don't skip
delete connection;//don't skip
//session.Close();//you can skip, this gets called when we exist the function

, CInternetSession obj , MFC ..\VC\atlmfc\src\mfc\inet.cpp

+1

All Articles