2010-01-18 14 views
17

Lo standard ISO C++ impone qualsiasi tipo di ordine di distruzione degli oggetti all'interno dei contenitori STL?Ordine di distruzione degli elementi dei contenitori STL

  • Sono std::list/std::vector/std::map elementi distrutti a partire dall'inizio o dalla fine del contenitore?
  • Posso fare affidamento sus memorizzando i suoi elementi internamente in std::pair s in modo che una chiave in una coppia venga distrutta prima del suo valore (o viceversa)?

risposta

18
  1. Non specificato nello standard.
  2. Sì, ma questo significa che la chiave viene distrutta dopo il il valore associato.
+0

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

+0

# 2, sì, questo è quello che intendevo, avrei dovuto scrivere viceversa. Puoi indicarmi la parte dello standard che specifica # 2? –

+0

20.2.2/1, e questo si collega ai miei commenti sulla risposta di Terry. –

4
  1. specificato
  2. Sì, si può dipendere da std :: map memorizzazione è elementi in std :: coppie, ma io non vedo nulla che specifica la parte di chiave di uno std :: coppia di essere destrutturato prima di una porzione di valore.
+2

Lo standard incarica * first * e * second * data members e li mostra in tale ordine, che, se tale ordine è richiesto, determina anche l'ordine di costruzione e distruzione. –

+0

Non riesco a trovare nulla che dice esplicitamente che l'ordine è richiesto, ma anche nulla che dice che è permesso essere diverso. Poiché sono membri pubblici e sicuramente non contrassegnati come "solo esposizione", non si applica nessuna delle altre clausole che concedono un margine di manovra per l'implementazione. Quindi, dovrò cadere dalla parte di quell'essere l'ordine richiesto. –

+0

Osservando lo standard C++ 0x del draft, sembra che lo standard imponga che * first * sia costruito prima di * second *. In particolare, 20.3.3.4 'pair(); Effetti: inizializza i suoi membri come se fossero implementati: pair(): \t first(), second() {} 'Ho letto che per indicare l'ordine è stato definito, ma rinvierò a un avvocato di lingua. –

Problemi correlati