【问题标题】:Why shared_ptr<void> instead of shared_ptr<HANDLE>为什么 shared_ptr<void> 而不是 shared_ptr<HANDLE>
【发布时间】:2012-12-29 21:23:24
【问题描述】:

基于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&lt;void&gt; 而不是boost::shared_ptr&lt;HANDLE&gt;

仅供参考:

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

【问题讨论】:

    标签: c++ boost


    【解决方案1】:

    因为boost::shared_ptr&lt;HANDLE&gt; 将是boost::shared_ptr&lt;PVOID&gt;,而boost::shared_ptr&lt;void*&gt; 显然与boost::shared_ptr&lt;void&gt; 不同。注意额外的指针。

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

    【讨论】:

      【解决方案2】:

      因为HANDLE 已经是一个指针。 shared_ptr&lt;HANDLE&gt; 将是一个指向HANDLE 的共享指针,而不是一个共享的HANDLE

      【讨论】:

        猜你喜欢
        • 2011-08-20
        • 2012-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-09
        • 1970-01-01
        • 2016-07-22
        相关资源
        最近更新 更多