为什么使用shared_ptr<void>而不是shared_ptr<HANDLE>?

4

基于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>

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

2个回答

5
因为一个 boost::shared_ptr<HANDLE> 将会是一个 boost::shared_ptr<PVOID>,这是一个 boost::shared_ptr<void*> - 显然不同于 boost::shared_ptr<void>。请注意多出来的指针。
如果你有一个 boost::shared_ptr<HANDLE>,它本质上就是一个智能指针,指向一个指向 void 的指针,而不是指向 void 的智能指针。

4

因为 HANDLE 已经是一个指针。一个 shared_ptr<HANDLE> 将会是一个指向 HANDLE 的共享指针,而不是一个共享的 HANDLE


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接