Supponiamo di voler chiamare una funzione esterna dell'oggetto per eseguire alcuni controlli all'interno del costruttore del corpo. Poiché la vita di un oggetto inizia quando il corpo del costruttore termina la sua esecuzione, si tratta di un design non sicuro?C++: durata di un oggetto e funzioni esterne
struct A;
void check(A const&) { /* */ }
struct A
{
A() { check(*this); }
};
Voglio dire, sto chiamando e funzione esterna con un oggetto non ancora vivo. È un comportamento indefinito?
Domande correlate: se metto quella funzione il controllo come una funzione di membro (statico o no), che cosa lo standard dice sull'utilizzo di oggetti non-ancora-vivi al di fuori del costruttore, ma all'interno della classe?
C'è qualche differenza nel concetto di durata tra il punto di vista di una classe e i suoi utenti (una specie di vita in classe rispetto alla classe esterna)?
Le [domande frequenti su C++] (https://isocpp.org/wiki/faq/ctors#using-this-in-ctors) contengono informazioni a riguardo. –
Va bene finché la funzione non è un membro virtuale e non è nell'elenco di inizializzazione – KABoissonneault
Un const è un riferimento e non viene inizializzato all'inizio del controllo né distrutto alla fine delle funzioni. Inoltre all'interno del costruttore l'oggetto è completamente costruito. Non vedo alcun problema in questo codice – Brahim