我讨论了异常安全保证,并设计了一个我认为提供强保证的示例:
template<typename E, typename LT>
void strongSort(vector<E*> &data, LT lt) // works on pointers
{
vector<E*> temp { data }; // bad_alloc? but 'data' not changed.
sort(temp.begin(), temp.end(), lt); // 'lt' might throw!
swap(temp, data); // considered safe.
}
只是一个简单的(C ++ 0x)示例如何使用它:
int main() {
vector<int*> data { new int(3), new int(7), new int(2), new int(5) };
strongSort( data, [](int *a, int *b){ return *a<*b;} );
for(auto e : data) cout << *e << " ";
}
假设LT
不改变元素,但它可能会抛出。假设代码提供的内容是否正确
- 强异常安全保证
- 异常中性_
LT