На MSVC11 з помилкою виникає наступний код
cannot convert parameter 1 from "std::unique_ptr<DerivedClass>" to "std::unique_ptr<BaseClass>"
Код:
class BaseClass
{ };
class DerivedClass : public BaseClass
{ };
void MyFunction(std::unique_ptr<BaseClass> obj)
{ };
int main()
{
auto ptr = std::unique_ptr<DerivedClass>(new DerivedClass);
MyFunction(ptr); // fails, with error about cannot convert type
// MyFunction(std::move(ptr)); // This will work
}
Як зазначалося у відповідях, причиною є std::move
відсутній, але повідомлення про помилку сприйняло мене досить, щоб опублікувати це питання, тому я його оновлював, тому кожен, хто схоже плутає, має найкращі шанси знайти відповідь.
Відповіді:
7 для відповіді № 1Ваша помилка не має нічого спільного з переміщенням вгору або вниз. Ви намагаєтеся скопіювати ptr
, що не допускається. Якщо ви пройдете std::move(ptr)
, трансляція буде неявним і автоматичним, як звичайний покажчик.