Недавно я перечитывал стандарт ISO С++ и нашел очень интересное замечание:
Обратите внимание, что для
std::vector
единственным ограничением типаT
дляstd::vector<T>
является то, что типT
должен иметь конструктор копирования. На самом деле, если память вектора заполнена во время вставки, выделяется новая памятьsize = 2 * oldSize
(это зависит от реализации), а затем копирует в нее старые элементы и вставляет этот один элемент.
Но подождите?
Чтобы выделить новую память типа, нам нужно что-то вроде этого, ptr = new T[2*size];
- Как это делается, потому что тип
T
может не иметь конструктора по умолчанию? - Затем Assignment, выделив память, мы должны назначить старые значения новой памяти, правильно?
- Принимая во внимание это 2 вещи, как
std::vector
сделать это с помощью "ТОЛЬКО КОПИРОВАТЬ КОНСТРУКТОР?" Какая реализация и языковые идиомы используются?