基于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
答案 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
。