io preferirei sia questo:
std::unique_ptr<Solver> S ( UseDummySolver
? createDummySolver()
: new STPSolver(true) );
Solver& STP = *S;
o questo:
std::shared_ptr<Solver> S ( UseDummySolver
? createDummySolver()
: new STPSolver(true) );
std::shared_ptr<Solver> STP = S;
Sia evitare un problema con il codice che hai lì: non abbiamo bisogno di fare decidere quale puntatore Chiama delete
quando gli oggetti lasciano l'ambito (o, in effetti, ricorda la necessità di chiamare lo delete
). Invece, aspettiamo solo che le variabili lascino l'ambito, quindi l'oggetto Solver
viene rimosso automaticamente. STP
è nel primo caso in modo univoco solo un altro modo di accedere all'oggetto mentre è nel campo di applicazione, nel secondo caso è un "comproprietario" indipendente dell'oggetto e entrambi i puntatori possono essere nuovamente assegnati in modo indipendente.
Questo è un * molto brutto * mezzo per assegnare due variabili contemporaneamente. * (masterizza codice [rs] come questo con il fuoco) * – user7116
Ci sono molte ragioni per le quali questo codice fa schifo. La parte del doppio incarico è solo una di queste. Non usare RAII è un altro. –
Sì ... non mi ero nemmeno reso conto che è legale, e non l'ho mai visto prima! – steveha