Skip to content

Strong exception safety

1、实现strong exception safety是C++ programmer的非常重要的一个目标,strong exception safety有着诸多优良的特性能够保证改善program

2、C++提供了非常多的technique、idiom来保证能够实现strong exception safety,这些technique、idiom是C++ programmer需要进行学习的

How to implement strong exception safety?

1、实现"commit-or-rollback" semantics、transaction

2、保证resource的安全,不会leak

NOTE:

? RAII,是否是basic exception safety?

那如何实现呢?下面是我的一些总结:

a、使用explicit try-catch

在 "boost Lessons Learned from Specifying Exception-Safety for the C++ Standard Library # 6 Should we take everything we can get? "中演示了这种写法:

template <class T>                                // 1 
void SearchableStack<T>::push(const T& t)         // 2 
{                                                       // 3 
    set<T>::iterator i = set_impl.insert(t);      // 4 
    try                                                 // 5 
    {                                                   // 6 
        list_impl.push_back(i);                         // 7 
    }                                                   // 8 
    catch(...)                                          // 9 
    {                                                   // 10 
        set_impl.erase(i);                              // 11 
        throw;                                          // 12 
    }                                                   // 13 
}                                                       // 14 

b、使用Scope-Guard idiom

这种方法不需要使用explicit try-catch ,参见 Scope-Guard 章节

c、RAII

这是C++中非常重要的一种idiom,参见 RAII 章节

d、copy-and-swap

它是一种广泛采用的实现strong exception safety的idiom,参见 Copy-and-swap 章节