Supponiamo che io sono un ++ struct C che ha sia POD e non-POD variabili membro:C'è un modo per rendere un valore struct C++-inizializzare tutte le variabili dei membri POD?
struct Struct {
std::string String;
int Int;
};
e in ordine per il mio programma per la produzione di un comportamento riproducibile voglio avere tutte le variabili membro inizializzate in costruzione. Posso usare una lista di inizializzazione per questo:
Struct::Struct() : Int() {}
il problema è, non appena ho bisogno di cambiare il mio struct e aggiungere una nuova variabile membro POD (diciamo bool Bool
) rischierei dimenticare di aggiungere alla lista di inizializzazione. Quindi la nuova variabile membro non verrà inizializzata in base al valore durante la costruzione della struct.
Inoltre non posso usare il memset()
trucco:
Struct::Struct()
{
memset(this, 0, sizeof(*this)); //can break non-POD member variables
}
perché chiamando memset()
per sovrascrivere le variabili membro già costruiti non-POD può rompere quelli.
C'è un modo per applicare l'inizializzazione del valore di tutte le variabili membro POD senza aggiungere esplicitamente la loro inizializzazione in questo caso?
mi sento di raccomandare ogni membro essere 'const'. Soprattutto quando sono tutti pubblici, è davvero sensato forzare l'immutabilità. È possibile utilizzare la sintassi di inizializzazione dell'array per creare istanze: 'Struct s = {" ... ", 0};' –
@Daniel: E quando voglio inserirlo in un contenitore? – GManNickG
@GMan: lo posizionerei in un 'std :: shared_ptr' in questo caso. O forse decidi di incapsulare correttamente i membri e rimuovere 'const'. –