【问题标题】:What is the elegant way to delete tmpfile created by boost::filesystem?删除 boost::filesystem 创建的 tmpfile 的优雅方法是什么?
【发布时间】:2020-07-25 03:32:20
【问题描述】:

我有一个代码 sn-p

        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 概念的析构函数上删除该路径,还是有现有的解决方案?

【问题讨论】:

标签: c++ boost raii


【解决方案1】:

我是否应该编写一个 FileDeleter,它采用路径并在使用所谓 RAII 概念的析构函数上删除该路径

这是一个相当合理的解决方案。请注意删除可能引发的任何异常,因为您不想从析构函数中抛出异常,尤其是从因抛出异常而正在执行的析构函数中抛出异常。

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

【讨论】:

  • 这正是我要找的,我使用了关键字defer 并没有找到这个库。
  • 那是因为它不会推迟事情。它使它们在确定的时间运行。
  • @sehe 其实很像 golang 和 Swift 中的 defer 概念。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-30
  • 2010-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-09
相关资源
最近更新 更多