![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 1 Всего: 20 |
Останется вектор в стабильном состоянии, если при вызове метода вектора insert, произойдет исключение в копируещем конструкторе одного из объектов типа C ? -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Что ты имеешь ввиду под стабильным состоянием? В C++ принято выделять три гарантии безопасности исключений
При возникновении исключения не происходит утечки ресурсов. Состояние программы может быть любое. строгая гарантия При возникновении исключения не происходит утечки ресурсов и программа остается в том состоянии, в котором была до вызова функции (т.е. происходит откат каких либо произведенных функцией действий). гарантия отсутствия исключений Полное отсутствие исключений. При соответствии одному из этих правил функция считается безопасной (exception safe). Вернемся к STL. Большинство операций с контейнерами в STL дают строгую гарантию безопасности исключений, тем не менее функции, строгая безопасность которых могла сказаться на производительности, дают базовую гарантию. Для каждой функции стандарт описывает поведение при возникновении исключения. В данном случае:
В твоем примере capacity() может измениться, но элемент вставлен не будет. |
||||
|
|||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 1 Всего: 20 |
azesmcar, подразумевал строгую гарантию.
И возможно элементы которые находятся после ожидаемого места вставки тоже могут быть не валидными ? Ведь при сдвиге какого-то из этих элементов и могло быть выброшено исключение в копирующем конструкторе. -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
||||
|
||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 1 Всего: 20 |
Спасибо за разъяснения.
-------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Зависит от релизации вектора. Текущую реализацию см. в соотвествующих заголовках.
В лучшем случае - элемент вставлен не будет. Это если: выделяется новая память под элементы массива и туда копируются старые элементы; (исключение при копировании -> удаление выделенной памяти, вектор остаётся в прежнем состоянии) После эта новая память заменяет старую, увеличивается capacity; Вызывется деструктор элементов в старой памяти; удаление старой памяти; (исключение в деструкторе -> не все будет очищено) Добавляется новый элемент, увеличивается size; (исключение при копировании -> size не увеличен) |
|||
|
||||
| spyswamp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 18.8.2006 Репутация: 1 Всего: 7 |
math64, в деструкторе исключений быть не должно.
-------------------- - why you call it beta? - cuz it's betta then nothin' |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |