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>

供参考:

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

2 回答 2

5

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

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

于 2012-12-29T21:25:49.450 回答
4

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

于 2012-12-29T21:25:59.507 回答