Если у вас был односвязный список:
A1 -> B1 -> C1
и вы написали свой собственный конструктор копирования, который, в свою очередь, вызывает конструктор копирования на внутреннем члене Node *, тогда вы получите:
A1 -> B1 -> C1
A2 -> B2 -> C2
Что вы не должны делать, это вызывать неявно сгенерированный конструктор копирования, который не будет выполнять каскадное копирование, то что вы получите:
A2
|
v
A1 -> B1 -> C1
Так что либо напишите свой собственный конструктор копирования, чтобы сделать глубокое копирование, либо определите частный конструктор копирования, который реализует запрет операции.
Кстати, std :: list реализует двусвязный список и реализует семантику глубокого копирования.