例如,在
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
对象的指针。
Aunique_ptr
到派生类可以隐式转换为 Aunique_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);
}
任何可能发生的切片都将发生在容器的元素类型上。间接包含的对象不受影响。