Boost.ScopeExit
프로그래밍 언어/boost2015. 4. 28. 11:40
Boost.ScopeExit
어떤 함수나 기타의 '{ ... }' 를 벗어나기 전에 호출가능한 코드를 작성할 수 있다 (자바의 finally 와 유사)
단, BOOST_SCOPE_EXIT 이전에 return 구문을 사용하면 처리되지 않음
BOOST_SCOPE_EXIT 와 BOOST_SCOPE_END 매크로 사이에서 처리되고 싶은 코드를 작성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #include <boost/scope_exit.hpp> int test() { int a = 10; // (3) 스코프를 만나서 여기로 온다 // 즉 } 후에 스택되감기 최종 전에 코드가 실행 // 되기 때문에 return 보다 나중에 처리가 된다. BOOST_SCOPE_EXIT(&a) { a = 0; std::cout << "exit : " << a << std::endl; } BOOST_SCOPE_EXIT_END; // (1) std::cout << "end : " << a << std::endl; // (2) return a; } // (3) int _tmain(int argc, _TCHAR* argv[]) { int j = test(); // 여기서 출력되는 값은 0 일것 같지만 10이 된다. // return 이 scopeExit 보다 먼저 실행된다 std::cout << j << std::endl; return 0; } |
try ~ catch 구문을 활용한 BOOST_SCOPE_EXIT
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #include <boost/scope_exit.hpp> int _tmain(int argc, _TCHAR* argv[]) { try { int a = 100; BOOST_SCOPE_EXIT(&a) { std::cout << "BOOST_SCOPE_EXIT" << std::endl; } BOOST_SCOPE_EXIT_END; std::cout << "try exit" << std::endl; } catch (...) { std::cout << "catch" << std::endl; } std::cout << "exit" << std::endl; return 0; } |
'프로그래밍 언어 > boost' 카테고리의 다른 글
Boost.Ref (0) | 2015.04.30 |
---|---|
Boost.Atomic (0) | 2015.04.30 |
Boost.Pool (0) | 2015.04.28 |
Boost.Thread (0) | 2015.04.28 |
shared_ptr 성능 이슈 및 테스트 (0) | 2014.04.02 |