【发布时间】:2018-12-02 09:53:36
【问题描述】:
在长时间的休息之后玩弄 C++。
我有一个 std::vector 的唯一指针,指向我迭代的对象,调用一个函数,该函数将派生 vector 中的对象的基类作为参数,如下所示:
for (auto const& object : objects)
{
_process(object);
}
objects 在哪里:
std::vector<std::unique_ptr<Derived>>
我想了解如何强制执行多态行为来调用函数:
_process(std::unique_ptr<Base> base)
【问题讨论】:
-
您不应该在循环通过
vector时尝试将unique_ptr<Derived>转换为unique_ptr<Base>。base参数是按值传递的,并且会从vector中获取指针的所有权。我只需将base参数更改为原始Base*指针,因为_process()不应更改所有权,然后将其称为_process(object.get()) -
我会使用
_process(Base*);并致电_process(object.get()); -
@RemyLebeau 您可以将
unique_ptr<Derived>转换为unique_ptr<Base>。 -
也就是说,我不明白这个问题。无论多态性如何,您都不能复制
unique_ptr。_process()是什么,你想做什么? -
@Barry 不转移指针的所有权
标签: c++ c++11 stl smart-pointers