Sto provando a utilizzare una classe derivata unique_ptr
in una funzione che prende un unique_ptr
in una classe base. Qualcosa di simile:unique_ptr a una classe base
class Base
{};
class Derived : public Base
{};
void f(unique_ptr<Base> const &base)
{}
…
unique_ptr<Derived> derived = unique_ptr<Derived>(new Derived);
f(derived);
Se ho capito this answer correttamente, questo codice dovrebbe funzionare, ma provoca i seguenti errori di compilazione:
errore C2664: 'F': non può convertire il parametro 1 da 'std: : unique_ptr < _Ty>' a 'std :: const unique_ptr < _Ty> &'
IntelliSense: nessuna conversione definita dall'utente adatto da "std :: unique_ptr < derivata, std :: default_delete < Der ived >>" a "std :: const unique_ptr < Base, std :: default_delete < Base >>" esiste
Se cambio f
prendere unique_ptr<Derived> const &derived
, funziona benissimo, ma non è questo quello che voglio.
Sto facendo qualcosa di sbagliato? Cosa posso fare per aggirare questo problema?
sto usando Visual Studio 2012.
In tal caso, sto considerando di andare con 4. Utilizzare 'shared_ptr'. – svick
Che ne dici di utilizzare solo un riferimento anziché un unique_ptr per la chiamata di funzione? – ltjax
@svick, perché passare un puntatore intelligente alla funzione se non assume la proprietà del puntatore? Non è quello che puntano i puntatori intelligenti. –