unique_ptr<Derived> = new deriv;
std::vector<unique_ptr<Base>>.push_back(std::move(deriv));
将DERIV切片键入unique_ptr<Base>
?
unique_ptr<Derived> = new deriv;
std::vector<unique_ptr<Base>>.push_back(std::move(deriv));
将DERIV切片键入unique_ptr<Base>
?
不会发生切片; unique_ptr<Base>
将拥有指向Derived
对象的指针。
A unique_ptr
到派生类可隐式转换为unique_ptr
为基类。
(你的例子并不在当前编辑编译,我只是要假设你的意图是什么)
不,不。切片是指将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);
}
任何切片可能发生的。间接包含的对象不受影响。