Thinking Different




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