Ответьте на вопросы к примеру из параграфа Е.1
От сам код из примера:
1 2 3 4 5 6 7 8 9 10 |
void f(vector<X>& v, const X& g) { v[2]=g;//X-ое присваивание может генерировать исключение v.push_back(g);//аллокатор у vector<X> может генерировать исключение sort(v.begin(),v.end());//Х-ая операция < может генерировать исключение vector<X>u= v;//X-ый копирующий конструктор может генерировать исключение //... //и здесь уничтожается - нужно гарантировать, что X-ый деструктор сработает //коректно } |
Так перечислим вопросы:
Что произойдет, если при выполнении присваивания значения g будет сгенерировано исключение? Я думаю ничего вектор останется в своем прежнем состоянии.
Будет ли при этом вектор v оставлен в недействительном состоянии? Думаю нет.
Что случится если конструктор, вызываемый в процессе копирования g операцией v.push_back(), сгенерирует исключение std::bad_alloc? Просто видимо ничего не произойдет.
Изменится ли при этом число элементов? Точно не скажу, но ведь библиотека защищена количество элементов не должно измениться.
Или в контейнер вектор добавиться недействительный элемент? Нет.
Что произойдет, если операция «меньше чем» из типа Х сгенерирует исключение во время сортировки? Половина элементов останется отсортированой половина нет.
Элементы будут отсортированы частично? Я думаю да.
Или операция сортировки удалит элемент из контейнера и не вернет его назад? Ну фиг его знает возможно, это все нужно тестить.
[youtube]https://www.youtube.com/watch?v=1QKD12EHyvw[/youtube]