CreateFile异常安全吗?

时间:2018-06-17 19:34:58

标签: c++ c visual-c++-2015

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

1 个答案:

答案 0 :(得分: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");
}