2010-01-18 4 views
17

Est-ce que la norme ISO C++ impose une sorte d'ordre de destruction des objets dans les conteneurs STL?Ordre de destruction des éléments de conteneurs STL

  • sont-std::list/std::vector/std::map éléments détruits à partir du début ou la fin du conteneur?
  • Puis-je m'appuyer sur std::map en stockant ses éléments en std::pair s en interne afin qu'une clé d'une paire soit détruite avant sa valeur (ou vice versa)?

Répondre

18
  1. Non spécifié dans la norme.
  2. Oui, mais cela signifie que la clé est détruite après sa valeur associée.
+0

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

+0

# 2, oui, c'est ce que je voulais dire, aurait dû écrire l'inverse. Pouvez-vous me signaler la partie de la norme qui spécifie # 2? –

+0

20.2.2/1, et cela rejoint mes commentaires sur la réponse de Terry. –

4
  1. Non spécifié
  2. Oui, vous pouvez compter sur std :: carte stocker est des éléments dans std :: paires, mais je ne vois rien qui spécifie la partie clé d'une std :: paire étant détruit avant une portion de valeur.
+2

La norme exige * les membres de données * first * et * second * et les affiche dans cet ordre, qui, si cet ordre est requis, détermine également l'ordre de construction et de destruction. –

+0

Je ne trouve rien qui dise explicitement que l'ordre est requis, mais rien qui dit qu'il est permis d'être différent. Comme ce sont des membres publics et qu'ils ne sont absolument pas marqués «exposition seulement», aucune des autres clauses accordant une marge de manœuvre à la mise en œuvre ne s'applique. Donc, je vais devoir tomber du côté de l'ordre requis. –

+0

En regardant le projet de norme C++ 0x, il semble que cette norme exige que * first * soit construit avant * second *. Plus précisément, 20.3.3.4 'pair(); Effets: Initialise ses membres comme s'il était implémenté: pair(): \t first(), second() {} 'J'ai lu cela pour dire que l'ordre est défini, mais je m'en remettrai à un juriste. –

Questions connexes