Boost C++ 库

...世界上最受推崇、设计最精良的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ Coding Standards

第 1 章 Boost.ScopeExit 1.1.0 - Boost C++ 函数库
Next

第 1 章 Boost.ScopeExit 1.1.0

Alexander Nasonov

Lorenzo Caminiti

根据 Boost 软件许可证版本 1.0 分发(参见附带文件 LICENSE_1_0.txt 或副本位于 https://boost.ac.cn/LICENSE_1_0.txt

该库允许在退出封闭作用域时执行任意代码。

如今,所有 C++ 开发人员都熟悉“资源获取即初始化”(Resource Acquisition Is Initialization,RAII) 技术。它将资源的获取和释放与保存资源的变量的初始化和销毁绑定在一起。有时,为这样的变量编写一个特殊的类是不值得的。这时 Boost.ScopeExit 就派上用场了。

程序员可以将资源获取直接放在他们的代码中,并在旁边使用此库编写释放资源的。例如 (另请参阅 world.cpp): [1]

void world::add_person(person const& a_person) {
    bool commit = false;

    persons_.push_back(a_person);           // (1) direct action
    // Following block is executed when the enclosing scope exits.
    BOOST_SCOPE_EXIT(&commit, &persons_) {
        if(!commit) persons_.pop_back();    // (2) rollback action
    } BOOST_SCOPE_EXIT_END

    // ...                                  // (3) other operations

    commit = true;                          // (4) disable rollback actions
}



[1] 此库的旧版本使用 Boost.Preprocessor 序列来指定捕获变量的列表。在保持完全向后兼容的同时,现在还可以使用逗号分隔的列表来指定捕获的变量 (这是首选语法)。有关更多信息,请参阅 无变长参数宏 部分。


Next