MSVC无法upcast unique_ptr

时间:2012-11-13 12:40:29

标签: c++ c++11

以下代码在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缺失了,但是错误信息让我很困惑地发布了问题,所以我更新了它,所以任何同样困惑的人都有最好的发现机会答案。

1 个答案:

答案 0 :(得分:7)

您的错误与向上或向下投射无关。您正在尝试复制ptr,这是不允许的。如果你传递std::move(ptr),那么强制转换将是隐式和自动的,就像常规指针一样。