std :: vector базового класса с производными объектами - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть заявка deque std::shared_ptr, заявлено, что она имеет базовый класс (назовем его Polygon), но я сохраняю указатели на производные объекты (например, Triangle). Сейчас я думаю об изменении структуры данных на std::vector, чтобы использовать тот факт, что вектор обеспечивает смежную память, но у меня есть пара вопросов:

1) Возможно ли это, даже если объекты имеют разные размеры? Или может случиться так, что из-за того, что производные объекты больше базового, они будут перекрываться в памяти?

2) Хранение std::shared_ptr Я не собираюсь хранить их буквально вместе в памяти, только указатели, это правда? Или я не прав?

Спасибо

1 Ответ

0 голосов
/ 07 ноября 2018

Возможно ли это, даже если объекты имеют разные размеры? Или может случиться так, что из-за того, что производные объекты больше базового, они будут перекрываться в памяти?

Это хорошо. Даже если Derived может быть больше, чем Base, вы не сохраняете их в векторе. Вы храните указатель на них, и указатель всегда имеет одинаковый размер.

Хранение std::shared_ptr Я не собираюсь буквально хранить их вместе в памяти, только указатели, это правда? Или я не прав?

Правильно, указатели будут располагаться рядом друг с другом в векторе, но то, на что они указывают, может находиться где угодно в памяти.

...