例如,在
中unique_ptr<Derived> = new deriv;
std::vector<unique_ptr<Base>>.push_back(std::move(deriv));
将派生切片到unique_ptr<Base>
?
答案 0 :(得分:6)
不会发生切片; unique_ptr<Base>
将拥有指向Derived
对象的指针。
派生类的unique_ptr
可以隐式转换为unique_ptr
到基类。
答案 1 :(得分:2)
(你的例子在当前的编辑中没有编译,我只是假设你的意图)
不,它没有。切片是指将Derived对象复制到Base对象中,而不是将Derived指针复制到Base指针中(此处,unique_ptr是红色鲱鱼)。
这导致切片:
class a { };
class b : public a { };
void foo(a myvar) { };
int main()
{
b myb;
foo(myb);
}
这不是:
class a { };
class b : public a { };
void foo(a* myvar) { };
int main()
{
b myb;
foo(&myb);
}
答案 2 :(得分:1)
可能发生的任何切片都会发生在容器的元素类型上。间接包含的对象不受影响。