Mi pregunta es simple, ¿es seguro el siguiente código?listas de inicialización del constructor orden/asignación pregunta
struct Parent {
B* _a;
Parent(B* a) : _a(a) {}
};
struct Child : public Parent {
B _b;
Child() : Parent(&_b), _b(2){};
};
int main() {
Child c;
return 0;
}
dos puntos más:
- Estoy interesado en la parte de pasar una referencia a un objeto miembro de la matriz.
- Por seguridad quiero decir que se asignará
_b
(y su dirección de memoria) y que este código funcionará independientemente de qué compilador use.
Gracias de antemano.
aclaración
por seguro que en realidad quería decir que la dirección de memoria era válido, puesto que ya sabía que no se ha inicializado. otros
notas
En mi código real que querían almacenar el objeto de tipo B
como un puntero a su clase base A
, así:
struct Parent {
A* _a;
Parent(A* a) : _a(a) {}
};
struct Child : public Parent {
B _b;
Child() : Parent(&_b), _b(2){};
};
int main() {
Child c;
return 0;
}
Lo cual, si entiendo AndreyT responder correctamente , es ilegal. Creo que intentaré hacer esto de otra manera, ya que este enfoque era propenso a errores. (Podría olvidar que no podría usar ese puntero y hacer algo con él en mi próximo refactor).
¿Qué son A y B? Porque está inicializando un miembro B * con A *. A deriva B? Además, ¿B tiene constructor, que toma 'int' o algo así? –
Probablemente, el constructor 'Parent' debe ser' Parent (B * a) '? –
@Kiril Kirov typo, en mi ejemplo inicial A era una superclase de B. Eso era para mostrar por qué lo necesitaría. –