List l2 = l1;
Несмотря на =
, поскольку это объявление , вы выполняете построение копирования (формально «инициализация копирования»), которое не имеет ничего общего с оператором присваивания.
Вы не определили конструктор копирования (который должен быть похож на ваш оператор присваивания копии), поэтому указатели действительно являются общими.
Результаты были бы такими, как вы ожидали, если бы вы написали:
List l2{};
l2 = l1;
Кстати, я бы дал значения по умолчанию size
и items
(0
и nullptr
соответственно), если бы я был вами.В противном случае, когда вы забудете, что {}
, члены имеют неопределенные значения, и все чертовски разрушаются.Это можно сделать с помощью хорошего конструктора по умолчанию или забыв обо всем этом предприятии и используя вместо него std::vector
;)