Diciamo che ho un oggetto Employee_Storage
che contiene un membro di dati di connessione al database. Questo membro dei dati dovrebbe essere memorizzato come puntatore o come riferimento?Quando è preferibile memorizzare i membri dei dati come riferimenti anziché puntatori?
Se devo conservare come riferimento, mi non hanno a che fare qualsiasi
NULL
controllo. (Quanto importante è NULL controllando comunque?)Se devo conservare come un puntatore, è più facile da configurare
Employee_Storage
(oMockEmployee_Storage
) per le fini del test.
In genere, avevo l'abitudine di memorizzare sempre i miei dati come riferimenti. Tuttavia, questo rende i miei oggetti finti difficili da configurare, perché invece di essere in grado di passare in NULL
s (presumibilmente all'interno di un costruttore predefinito) ora devo passare in oggetti true/mock.
Esiste una buona regola generale da seguire, specificatamente per quanto riguarda la verificabilità?
Per quanto riguarda il tuo punto sull'utilizzo di riferimenti solo quando non c'è motivo di cambiarli mai - Non potrei realizzare la stessa cosa con i puntatori usando un puntatore const? (Oggetto * const m_ptr <- Questo puntatore non può essere modificato.) Se è così, sembra che ci sia ancora meno motivo per usare i riferimenti ... – Runcible
@Runcible: True, anche se l'uso dei riferimenti è un po ' "più bello" rispetto all'uso dei membri dei puntatori, quindi se si vuole veramente questo comportamento, i riferimenti sono spesso più puliti con cui lavorare. Uso molto raramente i riferimenti per i membri, tuttavia - nella maggior parte dei casi è troppo poco flessibile. –
Vedo. E che ne pensi di NULL? Dato che stai usando i membri del puntatore, devi fare il controllo NULL dappertutto? Mi è stato detto che troppi controlli NULL equivalgono solo alla programmazione paranoica e al codice aggiuntivo. Sono curioso di sapere qual è il tuo approccio. – Runcible