Когда вы "новый" что-то, вы должны точно знать, насколько большим вам это нужно, верно?
Не совсем.По крайней мере, не так, как вы думаете об этом.
Когда вы new
необработанный массив, тогда, конечно, вы должны указать количество элементов в массиве.Но std::list
, std::vector
и прочие не необработанные массивы.
В качестве примера взят std::list
: снаружи вы можете думать об этом как о чем-то, что содержитВы положили в это.Однако, в деталях, это объект, который напрямую содержит только указатели.Эти указатели указывают на другие объекты, которые он выделил в куче (используя new
).Таким образом, сам экземпляр std::list
всегда имеет один и тот же размер, однако, когда вы добавляете к нему больше вещей, он в конечном итоге будет распределять больше вещей в других местах кучи для управления им.
Именно поэтому вы можетеиспользуйте список как локальную переменную, выделенную стеком, и без проблем вставляйте в него любое количество элементов.
UnicodeStringList MyList;
MyList.push_back(item1);
MyList.push_back(item2);
Нет необходимости в new
.Список организует свою собственную внутреннюю (выделенную кучу) бухгалтерию для размещения в качестве моих предметов, и вы хотите добавить к ней.
И так, когда один список A назначен списку B. Все элементы (и любые объекты бухгалтерского учета, управляемые изнутри)) из списка A копируются во вновь выделенные элементы кучи и передаются в список B.