2010-11-12 14 views
8

Considere el siguiente código:¿Hay alguna garantía para el orden en el que C++ apilar las variables son destruidos

{ 
    std::auto_ptr<Something> p1(pSomePointer); 
    std::auto_ptr<Something> p2(pSomeOtherPointer); 
    ... 
} 

¿Hay alguna garantía de que p2 destructor será llamado antes de p1 al salir del alcance? El sentido común dice que las variables de pila se deben destruir desde la parte superior de la pila, pero el compilador de C++ puede reordenar las asignaciones.

Respuesta

11

Sí, se destruyen en orden opuesto al orden de construcción: los objetos construidos al final se destruirán primero. C++ lo garantiza.

+2

... y no solo para variables de pila. – sbi

+0

@sbi: Sí, y este último puede conducir a todo tipo de errores si no se tiene cuidado. – sharptooth

+0

@sbi ¿De qué otras variables estamos hablando? ¿Global? – Elemental

Cuestiones relacionadas