CreateFile可以返回NULL吗?

Dan*_*Dan 6 c++ windows winapi

我知道CreateFile返回的无效值是INVALID_HANDLE_VALUE.但是因为我也喜欢使用RAII,所以很容易将HANDLE放在shared_ptr(如下:)中 shared_ptr<void> handle (CreateFile(args),&CloseHandle)以确保句柄关闭.我唯一担心这种快速简便的RAII方法是CreateFile可以返回NULL作为HANDLE值.

Dav*_*nan 8

NULL不是有效的句柄值.您可以从某些Windows API函数返回NULL以指示失败的事实中辨别出这一点.由于只有一个函数来处理句柄CloseHandle,因此它NULL不是有效值HANDLE.因此CreateFile无法回归NULL.

Raymond Chen写了一篇关于这个主题的博客文章:为什么HANDLE的返回值如此不一致?.

现在,我一无所知,shared_ptr<>所以不想评论你的想法是否合适.我只是在回答你提出的直接问题.

  • @valdo我的论点是`CloseHandle`不知道无效句柄是来自CreateFile还是其他使用"NULL"作为返回值的API.另一个更简单的论点是,如果`CreateFile`返回`NULL`,另一个函数信号如何失败? (2认同)