Sto provando a "modernizzare" un codice esistente.Passaggio di unique_ptr alle funzioni
- Ho una classe che attualmente ha una variabile membro "Dispositivo * dispositivo_".
- Si utilizza nuovo per creare un'istanza in un codice di inizializzazione e ha un "delete device_" nel distruttivo.
- Funzioni membro di questa classe chiamata molte altre funzioni che richiedono un dispositivo * come parametro.
Questo funziona bene, ma per "modernizzare" il mio codice ho pensato che dovrebbe modificare la variabile per essere definito "std::unique_ptr<Device> device_"
e rimuovere la chiamata esplicita di cancellare, il che rende il codice più sicuro e generalmente migliore.
La mia domanda è questa -
- Come devo quindi far passare il dispositivo _ variabile per tutte le funzioni che ne hanno bisogno come paramater?
Posso chiamare .get per ottenere il puntatore raw in ogni chiamata di funzione. Ma sembra brutto e spreca alcuni dei motivi per utilizzare un unique_ptr in primo luogo.
O posso cambiare ogni funzione in modo che invece di prendere un parametro di tipo "Device *" ora vuole un paramater di tipo "std :: unique_ptr &". Quale (per me) offusca in qualche modo i prototipi di funzione e li rende difficili da leggere.
Qual è la migliore pratica per questo? Ho perso altre opzioni?
Perché questo cambiamento rendere il codice più sicuro e generalmente meglio? Dalla tua descrizione, direi che è vero il contrario. –
@James Kanze I agree, unique_ptr non sembra comprare nulla in questo caso. – juanchopanza
Potresti avere ragione. Mi piace la "sicurezza" di unique_ptr in quanto non devi ricordarti di eliminarlo, ma in questo caso sembra avere dei costi. – jcoder