C++ 带有派生对象的基类的std::vector

C++ 带有派生对象的基类的std::vector,c++,memory,smart-pointers,stdvector,C++,Memory,Smart Pointers,Stdvector,我有一个deque ofstd::shared_ptr声明了一个deque of基类(我们称之为Polygon),但我在它上面存储指向派生对象的指针(例如三角形)。我现在正在考虑将数据结构更改为std::vector,以使用vector确保相邻内存这一事实,但我有几个问题: 1)即使对象具有不同的大小,这是否可能?或者,由于派生对象比基础对象大,它们可能会在内存中重叠? 2)存储std::shared_ptr我不打算让它们一起存储在内存中,只是指针是真的吗?还是我错了? 谢谢 即使对象具有不同的

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

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

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

谢谢

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

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

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

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

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

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

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


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

如果我存储了对象而没有指针。我会有记忆重叠的问题吗?或者那是不可能的?@carlos那么你在对象切片方面会有问题。以防我存储了对象而没有指针。我会有记忆重叠的问题吗?或者这是不可能的?@carlos那么你就有对象切片的问题了。