为什么shared_ptr <void>而不是shared_ptr <handle> </handle> </void>

时间:2012-12-29 21:23:24

标签: c++ boost

基于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); 
}

问题

为什么h被定义为boost::shared_ptr<void>而不是boost::shared_ptr<HANDLE>

供参考:

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

2 个答案:

答案 0 :(得分:4)

因为boost::shared_ptr<HANDLE>boost::shared_ptr<PVOID>,这是boost::shared_ptr<void*> - 显然与boost::shared_ptr<void>不同。注意额外的指针。

如果你有一个boost::shared_ptr<HANDLE>,那么它本质上是指向void的指针的智能指针,而不是指向void的智能指针。

答案 1 :(得分:4)

因为HANDLE已经是指针。 shared_ptr<HANDLE>是指向HANDLE共享指针,而不是共享HANDLE