std::move 会导致切片吗?
例如,
unique_ptr<Derived> = new deriv;
std::vector<unique_ptr<Base>>.push_back(std::move(deriv));
deriv 是否会被切片为类型 unique_ptr
?
For example, in
unique_ptr<Derived> = new deriv;
std::vector<unique_ptr<Base>>.push_back(std::move(deriv));
will deriv be sliced to type unique_ptr<Base>
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
不会发生切片;
unique_ptr
将拥有指向Derived
对象的指针。派生类的
unique_ptr
可以隐式转换为基类的unique_ptr
。No slicing will occur; the
unique_ptr<Base>
will own the pointer to theDerived
object.A
unique_ptr
to a derived class can be implicitly converted to aunique_ptr
to a base class.(您的示例不会在当前编辑中编译,我只是假设您的意图是什么)
不,它不会。切片是指将 Derived 对象复制到 Base 对象中,而不是将 Derived 指针复制到 Base 指针(这里,unique_ptr 是一个转移注意力的东西)。
这会导致切片:
这不会:
(your example doesn't compile in the current edit, I'm just going to assume what your intent was)
No, it doesn't. Slicing refers to copying Derived objects into a Base object, not a Derived pointer into a Base pointer (here, the unique_ptr is a red herring).
This results in slicing:
This does not:
任何可能发生的切片都将发生在容器的元素类型上。间接包含的对象不受影响。
Any slicing that could occur, would occur on the element type of the container. Objects contained indirectly are not affected.