C++ 带有派生对象的基类的std::vector
我有一个deque ofC++ 带有派生对象的基类的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我不打算让它们一起存储在内存中,只是指针是真的吗?还是我错了? 谢谢 即使对象具有不同的
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那么你就有对象切片的问题了。