2012-10-06 6 views
6

¿Cuál es la duración de un miembro de la clase C++? Por ejemplo, ¿en qué momento se lanzará el std::fstream de un objeto Foo? ¿Al ingresar al destructor o al salir del destructor? ¿Está esto definido en el estándar de C++?Curso de por vida de los miembros de la clase C++

struct Foo 
{ 
    std::fstream mystream; 
    ~Foo() 
    { 
     // wait for thread writing to mystream 
    } 
}; 

Respuesta

11

El miembro de datos mystream se destruye durante la destrucción del objeto Foo, después de se ejecuta el cuerpo de ~Foo(). C++ 11 §12.4 [class.dtor]/8 estados:

Después de ejecutar el cuerpo del destructor y la destrucción de los objetos automáticos asignados dentro del cuerpo, un destructor para la clase X llama a los destructores para X 's miembros directos no variables de datos no estáticos, los destructores para las clases base directas X y, si X es el tipo de la clase más derivada, su destructor llama a los destructores para las clases base virtuales de X.

mystream es una no variante, miembro de datos no estático de Foo (a variante miembro de datos es un miembro de un sindicato; Foo no es una unión).

2

Es la inversa de la construcción:

construcción: clases de base, los miembros de datos (mystream construida aquí), cuerpo del constructor

destrucción: cuerpo del destructor, los miembros de datos (mystream destruidos aquí), las clases de base

Cuestiones relacionadas