Mi trovo spesso nella situazione in cui voglio prendere in giro un oggetto non copiabile, ad esempio un handle DbHandle .
Stavo andando avanti e indietro guardando diverse scelte di design, e ho optato per il seguente disegno:
Nel mio codice di produzione, non è necessario che un client di Repository conosca l'oggetto DbHandle , ma per i test di unità, questo oggetto DbHandle è esattamente quello che voglio prendere in giro.
Ho optato per unique_ptr perché chiariscono che Respository possiede DbHandle , anche se è stato creato all'esterno.
#include <memory>
class Repository {
public:
Repository() : d_dbHandel(std::unique_ptr<DbHandel>(new DbHandle("default"))) {
d_dbHandel->open("myDB");
}
Repository(std::unique_ptr<DbHandle> DbHandle) :
d_dbHandel(std::move(DbHandle) {
}
inline DbHandle& getDbHandel() {
return *d_dbHandel;
}
private:
std::unique_ptr<DbHandel> d_dbHandel;
};
Quali sono alcuni dei difetti di questo approccio?