Hace una hora publiqué una respuesta here que, según mi opinión, era correcta. Sin embargo mi respuesta fue downvoted por Martin B. DijoInicialización de valor y tipos no POD
Tienes suerte y estás obteniendo ceros porque la memoria en la que me colocaron pasó a cero. Esto no está garantizado por el estándar.
Sin embargo, después de leer la respuesta de Michael Burr here y tratar el siguiente código de ejemplo
1)
#include <cassert>
struct B { ~B(); int m; };
int main()
{
B * b = new B();
assert(b->m == 0);
}
me ha dado un error de depuración en MSVC++ 2010.
tengo un error similar cuando probé el siguiente código [Mi respuesta here] en MSVC++ 2010
2)
#include <cassert>
struct Struct {
std::string String;
int Int;
bool k;
// add add add
};
struct InStruct : Struct
{
InStruct() : Struct() {}
};
int main()
{
InStruct i;
assert(i.k == 0);
}
Ni (1)
ni (2)
dio cualquier error en gcc/Clang que me hizo pensar si MSVC++ 2010 no es compatible con C++ 03. No estoy seguro.
De acuerdo con el post de Michael Burr [en C++ 03]
nuevo B() - valor inicializa B que cero inicializa todos los campos desde su ctor predeterminado se genera compilador en lugar de usuario -definido
dice The Standard
Para valor-inicializar un objeto de tipo Tmeans:
- si T es un tipo de clase (cláusula 9) con un constructor-declarado de usuario (12.1), , entonces el constructor predeterminado para T se llama (y la inicialización está mal formada si T no tiene un constructor por defecto accesible);
.....
de otro modo, el objeto se inicializa a cero
Desde el primer momento, si no hay ningún usuario declaró constructor por defecto el compilador sintetizado constructor por defecto, que se llamará será zero initialize
todos los campos (según el último punto).
Entonces, ¿dónde me equivoco? ¿Es correcta mi interpretación de la inicialización del valor?
Es su compilador: http://connect.microsoft.com/VisualStudio/feedback/details/564268/c-value-initialization http://connect.microsoft.com/VisualStudio/feedback/details/484295/vc- does-not-value-initialize-members-of-derived-classes-without-user-declared-constructor https://connect.microsoft.com/VisualStudio/feedback/details/100744/value-initialization-in-new-expression –
@Charles: Muchas gracias por estos enlaces. Si publica ese [su comentario] como respuesta, lo aceptaré. ':)' –
@Charles Bailey: Realmente, eso realmente responde la pregunta. ¿Por qué no es eso una respuesta? – sharptooth