Perché non c’è nessuna chiamata al costruttore?

Questo codice non si comporta come me lo aspetto.

#include using namespace std; class Class { Class() { cout<<"default constructor called"; } ~Class() { cout<<"destrutor called"; } }; int main() { Class object(); } 

Mi aspettavo che l’output ‘constructor di default chiamato’, ma non ho visto nulla come output. Qual è il problema?

No. Il tuo Class object(); line Class object(); Ha dichiarato una funzione. Quello che vuoi scrivere è un Class object;

Provalo.

Potresti anche essere interessato all’analisi più irritante (come altri hanno notato). Un ottimo esempio è in Efficace STL elemento 6 a pagina 33. (In dodicesima stampa, settembre 2009.) In particolare l’esempio nella parte superiore della pagina 35 è ciò che hai fatto, e spiega perché il parser lo gestisce come una dichiarazione di funzione.

Nessuna chiamata al costruttore

Perché il costruttore non viene mai chiamato in realtà.

Class object(); viene interpretato come la dichiarazione di un object funzione che non accetta argomenti e restituisce un object di Class [in base al valore]

Prova l’ Class object;

MODIFICA :

Come ha notato Mike, questo non è esattamente lo stesso codice di quello che stai dando al compilatore. Il costruttore / distruttore è public o è una struct di Class ?

Tuttavia google per C ++ analisi più irritante.

Puoi usarlo in questo modo:

 Class obj; //or Class *obj = new Class(/*constructor arguments*/);