-1

我正在使用 CreateFile() 打开和读取文件。如果抛出异常,文件将被关闭,还是我需要自己捕获并关闭文件。如果后者是真的,那么捕获和关闭文件的最佳方法是什么。谢谢!

4

1 回答 1

1

该文件不会被关闭。如果要确保它已关闭,可以unique_ptr使用自定义删除器将其包装起来,如下所示:

struct HandleDeleter
{
    void operator ()(HANDLE hObject) { CloseHandle(hObject); }
};

using SafeHandle = std::unique_ptr<HANDLE, HandleDeleter>; // for convenience

void someFunction()
{
    // automatically closed at the end of parent scope:
    SafeHandle hFile(CreateFile(...));

    throw std::runtime_error("the file will be closed now");
}
于 2018-06-17T19:40:37.287 回答