Perché un baccello in una struttura zero iniziati da un costruttore implicito quando si crea un oggetto nell'heap o un oggetto temporaneo nello stack?

StackOverflow https://stackoverflow.com/questions/4932781

Domanda

Lo standard e il Il libro C ++ afferma che il costruttore predefinito per i membri del tipo di classe è chiamato dal costruttore predefinito generato implicito, ma i tipi integrati non sono inizializzati. Tuttavia, in questo programma di test ottengo risultati inaspettati quando si allocano un oggetto nell'heap o quando si utilizza un oggetto temporaneo:

#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;

}

Ottengo questo output:

[STACK] Num: -1079504552
[HEAP]  Num: 0
[TEMP]  Num: 0

È un comportamento specifico del compilatore? Non ho davvero intenzione di fare affidamento su questo, ma sono curioso di sapere perché questo accade, specialmente per il terzo caso.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top