休息一段时间后开始使用 C++。
我有一个 std::vector
的唯一指针指向我迭代的对象,调用一个函数,该函数将 vector
中的对象从中作为参数的基类> 是派生的,像这样:
for (auto const& object : objects)
{
_process(object);
}
objects
应该是:
std::vector<std::unique_ptr<Derived>>
我想了解如何执行多态行为来调用函数:
_process(std::unique_ptr<Base> base)
最佳答案
std::unique_ptr
代表所有权,因此不能复制。
这意味着_process(std::unique_ptr<Base> base)
是一个接收器,即它消耗对象(它可以销毁它或将它存储在某个地方,但调用者不再控制它)。为了调用它,您必须使用 std::move
:
_process(std::move(object))
这样您就可以明确拒绝对象的所有权并将其从您的容器中删除 - 指针将重置为 nullptr
.
当然,这只能通过非 const
来完成引用。
如果您不想转让所有权而只想对对象做一些事情 - 名称为 _process
似乎暗示 - 你应该传递常规的原始指针:
_process(Base* base);
...
for (auto const& object : objects)
{
_process(object.get());
}
除了控制对象的生命周期之外,原始指针仍然适用于所有方面。
在这两种情况下(原始指针和 unique_ptr
)从 Derived
隐式转换绝对没有问题至 Base
.
关于c++ - 如何通过唯一指针获得多态行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50996080/