基于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;techniques.html#pvoid
发布于 2012-12-29 21:25:49
因为boost::shared_ptr<HANDLE>将是一个boost::shared_ptr<PVOID>,它是一个boost::shared_ptr<void*> --这显然与boost::shared_ptr<void>不同。注意额外的指针。
如果您有一个boost::shared_ptr<HANDLE>,那么它本质上就是指向void指针的智能指针,而不是指向无效的智能指针。
发布于 2012-12-29 21:25:59
因为HANDLE已经是一个指针了。shared_ptr<HANDLE>将是指向HANDLE的共享指针,而不是共享的HANDLE。
https://stackoverflow.com/questions/14086045
复制相似问题