Если у меня есть базовый класс и полученный класс, я могу создать вектор указателей базового класса, если я хочу группировать несколько базовых и/или полученных классов вместе в контейнере.
Пример:
Код: Выделить всё
class base
{
}
class derived : public base
{
}
std::vector group;
< /code>
Но возможно ли сделать следующее? < /p>
std::vector group;
IE: без указателей, которые требуют нового ing и delete ing? Шаблонный класс, который принимает параметр шаблона t . Вы можете думать об этом как < /p>
Все это означает, что std :: vector содержит элементы того же типа. T описывает тип. C ++ статически напечатан, что означает, что все типы указаны во время компиляции. < /P>
может быть одним из многих различных типов. Однако каждый экземпляр std :: vector содержит элементы одного и того же типа. Другими словами, какой размер он занимает в памяти? Это довольно очевидное ограничение. Вы не можете упаковать элементы в память, если размер элементов не известен. Кроме того, вы не можете перейти к элементу в массиве во время O (1), если только индекс элемента не может быть преобразован в адрес памяти, используя умножение. Поэтому вы можете создать std :: vector . Тем не менее, база класса не может иметь такого же размера, что и полученный класс , поэтому вы не можете создать std :: vector .
Как объясняют другие в ответах, std :: vector не ведут полиморфи.>
Подробнее здесь:
https://stackoverflow.com/questions/343 ... ss-objects