std::move 会导致切片吗?

发布于 2024-09-11 01:52:49 字数 202 浏览 3 评论 0原文

例如,

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

百变从容 2024-09-18 01:52:49

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

派生类的 unique_ptr 可以隐式转换为基类的 unique_ptr

No slicing will occur; the unique_ptr<Base> will own the pointer to the Derived object.

A unique_ptr to a derived class can be implicitly converted to a unique_ptr to a base class.

别靠近我心 2024-09-18 01:52:49

(您的示例不会在当前编辑中编译,我只是假设您的意图是什么)

不,它不会。切片是指将 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);
}

(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:

class a { };

class b : public a { };

void foo(a myvar) { };

int main()
{
    b myb;
    foo(myb);
}

This does not:

class a { };

class b : public a { };

void foo(a* myvar) { };

int main()
{
    b myb;
    foo(&myb);
}
我的痛♀有谁懂 2024-09-18 01:52:49

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

Any slicing that could occur, would occur on the element type of the container. Objects contained indirectly are not affected.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文