gpt4 book ai didi

c++ - 为什么 shared_ptr 而不是 shared_ptr

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:24:15 25 4
gpt4 key购买 nike

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

最佳答案

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

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

关于c++ - 为什么 shared_ptr<void> 而不是 shared_ptr<HANDLE>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14086045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com