Я пытаюсь использовать unique_ptr
для производного класса в функции, которая принимает unique_ptr
в базовый класс. Что-то вроде:unique_ptr в базовый класс
class Base
{};
class Derived : public Base
{};
void f(unique_ptr<Base> const &base)
{}
…
unique_ptr<Derived> derived = unique_ptr<Derived>(new Derived);
f(derived);
Если я понимаю this answer правильно, этот код должен работать, но это вызывает следующие ошибки компиляции:
ошибка C2664: «F»: не удается преобразовать параметр 1 из «станд: : unique_ptr < _Ty>»на 'сопзЬ станд :: unique_ptr < _Ty> &'
IntelliSense: нет подходящего определяемые пользователем преобразование из«STD :: unique_ptr < Derived, станд :: default_delete < Der ived >>»к "сопзЬ станд :: unique_ptr < базы, станд :: default_delete < Base >>" существует
Если изменить f
принять unique_ptr<Derived> const &derived
, он отлично работает, но это не то, что я хочу.
Я что-то не так? Что я могу сделать, чтобы обойти это?
Я использую Visual Studio 2012.
В этом случае я рассматриваю возможность использования 4. Используйте 'shared_ptr'. – svick
Как просто использовать ссылку вместо unique_ptr для вызова функции? – ltjax
@svick, зачем передавать умный указатель на функцию, если она не принимает права на указатель? Для этого не нужны умные указатели. –