![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| zim22 |
|
||||||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
Я думал, что порядок вызовов деструкторов обратен порядку вызова конструкторов.
Т.е. если создаётся сначала объект А, а потом объект Б, то при выходе из области видимости будет сначала удалён объект Б, а потом А. В случае создания С-массива объектов так и происходит.
Однако в случае std::vector элементы удаляются, начиная с индекса 0 и до конца. Это не противоречит Стандарту?
Это сообщение отредактировал(а) zim22 - 4.2.2010, 13:57 |
||||||||
|
|||||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
это понятно, что динамические объекты будут удалены принуждённо, используя delete. но тем не менее в Мейерсе "More effective C++" (Item 4) удаление объектов в куче производится от последнего к первому. я вот и задумался, почему он именно в таком порядке удалял. и пришёл только к одной логически обоснованной позиции: удаление от последнего к первому велось для того, чтобы не нарушать Стандарт, в котором возможно где-то сказано, что вызов деструкторов должен быть обратен вызову конструкторов.
|
|||
|
||||
| azesmcar |
|
||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Добавлено через 4 минуты и 14 секунд
а кто сказал что то, что сказано в стандарте по поводу оператора delete [] касается вектора?
с оператором delete [] компилятор прекрасно справляется. |
||||||
|
|||||||
| tolgamrab |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 1.2.2010 Где: г. Смоленск Репутация: нет Всего: нет |
пересмотрел стандарт на контейнеры (глава 23), нет там такого. Стандартизируется только сложность методов и интерфейсы. Так что у Мейерс, вероятно, решил перенести на динамический контейнер правила из другой области C++, чтобы избежать тонких проблем при использовании этого контейнера. Попытка встроить в алгоритм использование такой "фичи" ни к чему хорошему не приведет. |
|||
|
||||
| zim22 |
|
||||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
никто и не говорил. но в другой книге (совпадение?) элементы тоже удаляются в обратном порядке. в той книге (С++ Primer 4th edition, параграф 18.1.2) они создавали свой класс Vector и там была функция reallocate, которая вызывалась тогда, когда при вставке нового элемента в векторе не хватало места и необходимо было выделить кусок памяти побольше.
у меня вопрос: им что, всем делать нечего? почему они "извращаются" и удаляют в обратном порядке элементы? *** здесь сказано, что в ISO C++ standard для std::vector порядок удаления не установлен (unspecified). Т.е. как хотите - так и реализовывайте. а здесь частично объясняется зачем удалять, начиная с последнего элемента:
Это сообщение отредактировал(а) zim22 - 4.2.2010, 18:34 |
||||||
|
|||||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |