Un'ora fa ho inviato una risposta here che secondo me era corretta. Tuttavia la mia risposta è stata downvoted da Martin B. Ha dettoInizializzazione del valore e tipi Non POD
Sei solo fortunato e stai prendendo zeri perché la memoria in cui sono stato inserito è stata inizializzata a zero. Questo non è garantito dallo standard.
Tuttavia, dopo aver letto la risposta di Michael Burr here e cercando il seguente codice di esempio
1)
#include <cassert>
struct B { ~B(); int m; };
int main()
{
B * b = new B();
assert(b->m == 0);
}
ho ottenuto un errore di debug MSVC++ 2010.
ho avuto un errore simile quando ho provato il seguente codice [La mia risposta here] su 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);
}
Né (1)
né (2)
ha dato un tale errore gcc/Clang, che mi ha fatto pensare se MSVC++ 2010 non supporta C++ 03. Non sono sicuro.
Secondo il post di Michael Burr [in C++ 03]
nuova B() - valore inizializza B che zero inizializza tutti i campi dalla sua ctor di default è compilatore generato al contrario di utente -defined.
dice Lo Standard
Per valore-inizializzare un oggetto di tipo Tmeans:
- se T è un tipo di classe (clausola 9) con un costruttore user-dichiarata (12.1), quindi il costruttore predefinito per T è chiamato (e l'inizializzazione è mal formata se non è un costruttore predefinito accessibile);
.....
altrimenti, l'oggetto viene inizializzato a zero
Dal primo punto, se non v'è alcun utente dichiarato costruttore di default il compilatore sintetizzato costruttore di default che sarà chiamato zero initialize
tutti i campi (in base all'ultimo punto).
Quindi dove sbaglio? La mia interpretazione dell'inizializzazione del valore è corretta?
È il tuo compilatore: 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-declaration-constructor https://connect.microsoft.com/VisualStudio/feedback/details/100744/value-initialization-in-new-expression –
@Charles: Grazie mille per questi collegamenti. Se pubblichi [il tuo commento] come risposta, lo accetto. ':' –
@Charles Bailey: Davvero, questo in realtà risponde alla domanda. Perché non è una risposta? – sharptooth