Sto riscrivendo del codice per eliminare le variabili globali e ho creato un distruttore di classe per la gestione delle operazioni di pulizia di alcune risorse di libreria di terze parti, ma sono preoccupato per un codice che inizializza un membro da un altro membro nell'elenco di inizializzazione della classe.Posso usare i membri della classe C++ inizializzati nell'elenco di inizializzazione, più avanti nell'elenco?
class MyPodofoDocument {
public:
// generates pdf to stream
MyPodofoDocument(std::stringstream *pStringStream)
: device(pStringStream), document(&device)
{
}
private:
PoDoFo::PdfOutputDevice device;
PoDoFo::PdfStreamedDocument document;
PoDoFo::PdfPainter painter;
};
Il codice che utilizza questa classe non ha bisogno di vedere tutti i dettagli che vanno in utilizzando la libreria, ma il modo in cui li nascondo rende dipendenti da utilizzare per inizializzare i membri altri membri, prima che colpisca il blocco di codice attuale del costruttore, dove ha un puntatore valido.
Funziona in uno scheletro di unità di misura, quindi la mia domanda è fondamentalmente, "Va bene, portatile e sicuro?"
Inoltre, è legale ottenere l'indirizzo o associare un riferimento a un membro ancora da costruire (ovvero è possibile passare un riferimento a un membro dichiarato in seguito se il destinatario non * usa * l'oggetto, ma memorizza solo il riferimento/puntatore). –
È legale passare, ma semanticamente sbagliato, come si passa un puntatore a qualcosa che non è stato ancora costruito. –
@AlexChamberlain: Niente di sbagliato, necessariamente, ma probabilmente ha bisogno di un doppio controllo. – GManNickG