2010-01-18 3 views
17

Предоставляет ли стандарт ISO C++ какой-либо порядок уничтожения объектов внутри контейнеров STL?Порядок уничтожения элементов контейнера STL

  • ли std::list/std::vector/std::map элементы уничтожены, начиная с самого начала или конца контейнера?
  • Могу ли я полагаться на std::map, сохраняя его элементы в std::pair с внутренней стороны, так что ключ в паре разрушается до его значения (или наоборот)?

ответ

18
  1. Не указано в стандарте.
  2. Да, но это означает, что ключ уничтожен после связанное с этим значение.
+0

+1 ............ :) –

+0

# 2, да, вот что я имел в виду, должен был написать наоборот. Можете ли вы указать мне на часть стандарта, который указывает # 2? –

+0

20.2.2/1, и это связано с моими комментариями к ответу Терри. – 2010-01-18 03:01:42

4
  1. Неизвестно
  2. Да, вы можете положиться на станд :: карте хранения это элементы STD :: пар, но я не вижу ничего, что указывает ключ порцию станд :: парный существо разрушено до части Value.
+2

Стандартные мандаты * первых * и * вторых * элементов данных и отображаются в указанном порядке, который, если этот заказ требуется, также определяет порядок строительства и уничтожения. – 2010-01-18 02:49:18

+0

Я не могу найти ничего, что явно говорит, что требуется заказ, но также ничего, что говорит о том, что ему разрешено быть другим. Поскольку они являются публичными членами и определенно не отмечены только «изложением», ни одно из других положений, предоставляющих свободу применения, не применяется. Поэтому мне придется упасть на сторону того, что является требуемым порядком. – 2010-01-18 03:03:21

+0

Рассматривая проект стандарта C++ 0x, кажется, что этот стандарт указывает, что * first * будет создан до * second *. В частности, 20.3.3.4 'pair(); Эффекты: Инициализирует своих членов, как если бы они были реализованы: pair(): \t first(), second() {} 'Я читал, что для обозначения порядка определен, но я буду отсрочен до юриста по языку. –

Смежные вопросы