La información que usted se refiere en más eficaz C++ aplica a los objetos que contienen un par de otro objeto, como en este caso:
class Foo {
private:
Bar bar_1;
Bar bar_2;
public:
Foo() : bar_1(), bar_2() {}
};
En el ejemplo anterior, se le han construido bar_1 primera , seguido de bar_2. Cuando un objeto de la clase Foo se destruye, primero se destruye bar_2
, luego bar_1
. A eso se refiere Scott Meyers.
Desde el punto de vista de la clase, una matriz de barras sería otro objeto que el compilador necesita destruir, por lo que el orden de destrucción afecta cuando la matriz se destruye en el contexto de los otros objetos de la clase.
En cuanto a qué orden se destruyen los elementos de una matriz, no me sorprendería demasiado si eso depende de la implementación. También tendrá la optimización desempeñando un papel aquí (por ejemplo, una matriz POD puede destruirse simplemente liberando su memoria, como puede ser un objeto que se compone únicamente de POD). Todo lo anterior puede afectar el orden en que se destruirán los elementos de una matriz.
Me interesaría saber por qué necesita saber el orden en que se destruyen los elementos de la matriz (aparte de la curiosidad técnica, que sería una razón válida en mi humilde opinión). Si es porque hay dependencias entre los elementos de la matriz, creo que la estructura de datos podría necesitar revisión.
todos ellos están construidos con los constructores por defecto y cualquier orden de construcción/destrucción sería suficiente. "Dado que un constructor no-arg puede acceder a globales (clase estática por ejemplo), hace una diferencia en la matriz resultante qué orden es ' Reconstruido. Así que no estoy muy seguro de lo que quiere decir con "cualquier pedido" - solo una orden cumple con 12.6 del estándar. El estándar podría haber dicho que el orden fue definido por la implementación, o podría haber dicho que están construidos en orden inverso al número de factores primos distintos en el índice, con vínculos determinados por la suma de dígitos en la base 7 ;-) –