4

例如,在

unique_ptr<Derived> = new deriv;
std::vector<unique_ptr<Base>>.push_back(std::move(deriv));

将 deriv 切成类型unique_ptr<Base>

4

3 回答 3

6

不会发生切片;将unique_ptr<Base>拥有指向Derived对象的指针。

Aunique_ptr到派生类可以隐式转换为 Aunique_ptr到基类。

于 2010-07-22T03:24:29.580 回答
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);
}
于 2010-07-22T03:25:28.940 回答
1

任何可能发生的切片都将发生在容器的元素类型上。间接包含的对象不受影响。

于 2010-07-22T03:25:34.340 回答