Herb Sutter menciona en uno de sus artículos http://www.gotw.ca que un objeto está construido (tiene existencia válida) solo si el constructor ejecuta complete.ie para ponerlo de una manera cruda, el control pasa más allá de su corchete final.Llamar a un método en Constructor
Ahora consideremos el siguiente código
class A
{
public:
A()
{
f();
}
void f()
{
cout << "hello, world";
}
};
int main()
{
A a;
}
Ahora de lo que dice Herb, no podemos decir que ya que A no está completamente construido en el interior de su constructor Llamada f() dentro del constructor no es válido como el "presente "ptr aún no está listo.
Todavía hay de hecho un "esto" válido dentro del constructor y se llama a f().
no creo que la hierba está diciendo algo incorrecto ... pero supongo que estoy interpretando de forma incorrecta puede .... algunos me explique qué es exactamente lo que es?
Aquí está el enlace al artículo: http://www.gotw.ca/gotw/066.htm Habla de las excepciones de los constructores. Específicamente aquí está el extracto del mismo en el que se basa mi pregunta:
- ¿Cuándo comienza la vida útil de un objeto? Cuando su constructor finaliza correctamente y devuelve normalmente. Es decir, el control llega al final del cuerpo del constructor o una declaración de devolución anterior.
-Cuando finaliza el tiempo de vida de un objeto? Cuando comienza su destructor. Es decir, el control llega al comienzo del cuerpo del destructor. punto importante aquí es que el estado del objeto antes de que comience su vida útil es exactamente el mismo que después de sus extremos por vida - no hay ningún objeto, periodo. Esta observación nos lleva a la pregunta clave:
Podríamos resumir el modelo de constructor de C++ de la siguiente manera:
Either:
(a) The constructor returns normally by reaching its end or a return statement, and the object exists.
Or:
(b) The constructor exits by emitting an exception, and the object not only does not now exist, but never existed.
"Parece que no ha leído el artículo Herb Sutter con cuidado." - Un poco duro considerando que no puedes echarle mano al artículo todavía ... – razlebe
@sgreeve: áspero? ¿por qué? – Nawaz
Usted está asumiendo que el OP no leyó el artículo cuidadosamente. Sin ver el artículo, no se sabe si explicaba bien la situación, si es que lo hacía. – razlebe