ScopeExitはスコープを抜けたときに実行されるブロックを定義できます。
C++0xのラムダ式風に変数をキャプチャすることができます。
#include <iterator> #include <iostream> #include <vector> #include <algorithm> #include <boost/scope_exit.hpp> using namespace std; vector<int> v; void foo() { int index = 1; v.push_back(1); // スコープ抜けたらこのブロックを実行(indexはコピー、vは参照でキャプチャ) BOOST_SCOPE_EXIT((index)(&v)) { v[index] = 8; v.pop_back(); } BOOST_SCOPE_EXIT_END; v.push_back(2); v.push_back(3); } int main() { foo(); copy(v.begin(), v.end(), ostream_iterator<int>(cout, "\n")); // 1, 8 }