Why shared_ptr <void> instead of shared_ptr <HANDLE>

Based on http://en.highscore.de/cpp/boost/smartpointers.html#smartpointers_shared_pointer

#include <boost/shared_ptr.hpp> #include <windows.h> int main() { boost::shared_ptr<void> h(OpenProcess(PROCESS_SET_INFORMATION, FALSE, GetCurrentProcessId()), CloseHandle); SetPriorityClass(h.get(), HIGH_PRIORITY_CLASS); } 

Question

Why is h defined as boost::shared_ptr<void> rather than boost::shared_ptr<HANDLE> ?

FYI:

 WINBASEAPI HANDLE WINAPI OpenProcess( __in DWORD dwDesiredAccess, __in BOOL bInheritHandle, __in DWORD dwProcessId ); typedef void * HANDLE; 

http://www.boost.org/doc/libs/1_47_0/libs/smart_ptr/sp_techniques.html#pvoid

+4
source share
2 answers

Because boost::shared_ptr<HANDLE> will be boost::shared_ptr<PVOID> , which is boost::shared_ptr<void*> - which is obviously different from boost::shared_ptr<void> . Pay attention to the additional pointer.

If you have boost::shared_ptr<HANDLE> , it will essentially be a smart pointer to a pointer to void , unlike a smart pointer to void.

+4
source

Because HANDLE already a pointer. A shared_ptr<HANDLE> will be a shared pointer to HANDLE , not a shared HANDLE .

+4
source

All Articles