Поскольку конструктор копирования, который вы явно указали для sample
, не требует вызова конструктора копирования core
.Вам нужно написать : core(obj)
, если вы хотите, чтобы это произошло.
Другими словами, когда вы пишете явный конструктор копирования, вы берете на себя ответственность за конструкцию копии sample
, включая ееcore
подобъект.Написав это так, как вы это сделали, вы решили не инициализировать подобъект core
, используя obj
.Поскольку вы еще не сказали, как вы делаете хотите, чтобы он был инициализирован, компилятор просто использует конструктор по умолчанию core
, следовательно, поведение во втором случае, которое вы обрисовали в общих чертах.
В отличие от этогов первом случае сгенерированный компилятором конструктор копирования по умолчанию для sample
запрашивает инициализацию субобъекта core
с использованием конструктора копирования core
, отсюда и наблюдаемое поведение.