具有派生对象的基类的std :: vector

时间:2018-11-06 21:04:19

标签: c++ memory smart-pointers stdvector

我有一个std::shared_ptr的双端队列,它声明了一个基类的双端队列(我们称它为Polygon),但是我在其上存储了指向派生objecs的指针(例如Triangle)。我现在正在考虑将数据结构更改为std::vector,以利用向量确保相邻内存的事实,但是我在这里有两个问题:

1)即使对象的大小不同,这是否可能?还是会发生这种情况,因为派生的对象比基对象大,它们将在内存中重叠?

2)将std::shared_ptr存储在内存中,只是指针不将它们按字面意义放在一起吗?还是我错了?

谢谢

1 个答案:

答案 0 :(得分:5)

  

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

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

  

存储std::shared_ptr我不会仅将指针真正地存储在内存中,对吗?还是我错了?

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