Я обсуждаю Гарантии безопасности исключений и разработал пример, который, я думаю, обеспечивает Сильную гарантию :
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
не изменяет элементы, но может бросить. Правильно ли предположить, что код обеспечивает
- Сильная исключительная безопасность Гарантия
- Is Нейтральное исключение , w.r.t до
LT