【发布时间】:2018-12-15 00:31:18
【问题描述】:
一个简单的代码
class Base {};
class Derived : Base {};
unique_ptr<Base> Create() {
unique_ptr<Base> basePtr = make_unique<Derived>(); // compile error
return basePtr;
}
产生编译错误(“没有合适的转换”)。我找到了similar question,解决方案是使用std::move。我试过这个
unique_ptr<Derived> derived = make_unique<Derived>();
unique_ptr<Base> basePtr = std::move(derived); // compile error
但现在std::move 产生编译错误。我还发现 question 哪里(如果我理解得很好)如果我们使用,演员应该是自动的
unique_ptr<Base> basePtr = make_unique<Derived>(new Derived()); //compile error
但这也不起作用(编译错误),并且recommended 也不能与智能指针一起使用new。
什么是正确的解决方案?
到目前为止我发现的唯一可行的解决方案
unique_ptr<Base> basePtr = unique_ptr<Base>((Base*)new Derived());
看起来真的很丑。
【问题讨论】:
标签: c++ pointers unique-ptr