El estándar y el libro en C++ dicen que el constructor predeterminado implícito generado llama al constructor predeterminado para los miembros del tipo de clase, pero los tipos incorporados no se inicializan. Sin embargo, en este programa de prueba consigo resultados inesperados cuando se asigna un objeto en el montón o cuando se utiliza un objeto temporal:¿Por qué un POD en una estructura inicializa cero mediante un constructor implícito al crear un objeto en el montón o un objeto temporal en la pila?
#include<iostream>
struct Container
{
int n;
};
int main()
{
Container c;
std::cout << "[STACK] Num: " << c.n << std::endl;
Container *pc = new Container();
std::cout << "[HEAP] Num: " << pc->n << std::endl;
delete pc;
Container tc = Container();
std::cout << "[TEMP] Num: " << tc.n << std::endl;
}
consigo esta salida:
[STACK] Num: -1079504552
[HEAP] Num: 0
[TEMP] Num: 0
Es esto algún comportamiento específico del compilador? Realmente no tengo la intención de confiar en esto, pero tengo curiosidad por saber por qué sucede esto, especialmente para el tercer caso.
posible duplicado de [Inicialización predeterminada de Struct en C++] (http://stackoverflow.com/questions/2951586/default-struct-initialization-in-c) – sharptooth
Supongo que el montón se inicializa con ceros – davka
Pensé lo mismo sobre el caso Heap, tal vez fue solo ceros por casualidad, pero me parece sorprendente el caso temporal objeto. –