Buscar..


Introducción

Más ejemplos de cómo C ++ puede salir mal.

Continuación del comportamiento indefinido

Refiriéndose a los miembros no estáticos en las listas de inicializadores

Hacer referencia a miembros no estáticos en las listas de inicializadores antes de que el constructor haya comenzado a ejecutarse puede dar como resultado un comportamiento indefinido. Esto resulta ya que no todos los miembros están construidos en este momento. A partir del borrador estándar:

§12.7.1: para un objeto con un constructor no trivial, refiriéndose a cualquier miembro o clase base no estática del objeto antes de que el constructor comience a ejecutar los resultados en un comportamiento indefinido.

Ejemplo

struct W { int j; };
struct X : public virtual W { };
struct Y {
   int *p;
   X x;
   Y() : p(&x.j) { // undefined, x is not yet constructed
   }
};


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow