我正在尝试在一个接受基类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);
如果我正确理解这个答案,那么这段代码应该可以工作,但它会导致以下编译错误:
error C2664: 'f' : cannot convert parameter 1 from 'std::unique_ptr<_Ty>' to 'const std::unique_ptr<_Ty> &'
IntelliSense:不存在适当的用户定义的转换,从“std::unique_ptr<Derived,std::default_delete<Derived>>”到“const std::unique_ptr<Base,std::default_delete<Base>>”
如果我将f
更改为接受unique_ptr<Derived> const &derived
,那么它可以正常工作,但那不是我想要的。
我做错了什么吗?我能做些什么来解决这个问题?
我正在使用Visual Studio 2012。
shared_ptr
。 - svickreturn std::unique_ptr<Base>(std::move(p))
,我猜。 - Kerrek SBf()
在做什么(假设它实际上不是空的)- 它可能会将所有权传递给其他地方。我们能说的只是我们放弃或转移所有权吗? - Zitrax