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>は-でありboost::shared_ptr<PVOID>boost::shared_ptr<void*>これは明らかに。とは異なりboost::shared_ptr<void>ます。余分なポインタに注意してください。

があれば、voidへのスマートポインタではなく、boost::shared_ptr<HANDLE>本質的にはへのポインタへのスマートポインタになります。void

于 2012-12-29T21:25:49.450 に答える
4

HANDLEはすでにポインタだからです。Ashared_ptr<HANDLE>は、共有ではなく、への共有ポインタにHANDLEなります。HANDLE

于 2012-12-29T21:25:59.507 に答える