【问题标题】:std::vector of Base class with Derived objects带有派生对象的基类的 std::vector
【发布时间】:2018-11-06 21:04:19
【问题描述】:

我有一个std::shared_ptr 的双端队列声明了一个基类的双端队列(我们称之为多边形),但我在它上面存储了指向派生对象的指针(例如三角形)。我现在正在考虑将数据结构更改为std::vector,以使用向量确保相邻内存这一事实,但我在这里有几个问题:

1) 即使对象的大小不同,这是否可能?或者由于派生对象比基础对象大,它们会在内存中重叠?

2) 存储std::shared_ptr 我不会让它们在内存中真正在一起,只是指针是真的吗?还是我错了?

谢谢

【问题讨论】:

    标签: c++ memory smart-pointers stdvector


    【解决方案1】:

    即使对象的大小不同,这是否可能?还是会发生由于派生对象大于基础对象而导致它们在内存中重叠的情况?

    这很好。即使Derived 可以大于Base,您实际上并没有将它们存储在向量中。您正在存储指向它们的指针,并且指针的大小始终相同。

    存储std::shared_ptr 我不会将它们从字面上放在内存中,只是指针是真的吗?还是我错了?

    正确,指针将在向量中彼此相邻,但它们指向的可能是内存中的任何位置。

    【讨论】:

    • 如果我存储了对象而没有指针。我会有内存重叠的问题吗?或者那是不可能的?
    • @carlos 那么你会遇到对象切片的问题。
    猜你喜欢
    • 1970-01-01
    • 2017-04-10
    • 2021-11-26
    • 2016-02-19
    • 2013-06-29
    • 1970-01-01
    • 2011-07-20
    • 2020-08-12
    • 1970-01-01
    相关资源
    最近更新 更多