删除 boost::filesystem 创建的 tmpfile 的优雅方法是什么?

What is the elegant way to delete tmpfile created by boost::filesystem?

我有一个代码片段

        if (!boost::filesystem::exists(tempDir)) {
            boost::filesystem::create_directories(tempDir);
        }
        auto path = tempDir / boost::filesystem::unique_path("gfbfv1-%%%%-old");
        do_something_maythrow(path);
        remove(path);

即使 do_something_maythrow 抛出,我如何确保始终删除路径?

我应该写一个 FileDeleter 来接受一个路径并在利用所谓的 RAII 概念的析构函数上删除该路径还是有现有的解决方案?

Should I write a FileDeleter which takes a path and remove that path on destructor which utilize the so-called RAII concept

这是一个比较合理的方案。小心处理删除可能引发的任何异常,因为您不想从析构函数中抛出,尤其是从因抛出异常而正在执行的析构函数中抛出。

但是,如果这不是通常需要的结构,因此不需要可重用的解决方案,那么一个简单的临时替代方法是使用 ScopeExit,也称为作用域防护。