В первом примере не копируется закрытый атрибут экземпляра, поскольку они являются экземплярами ботов одного и того же класса.
Однако, если вы добавляете методы / свойства доступа, любой приличный компилятор должен оптимизировать их до простых «inline», в этом случае второй метод - более чистый код (все обращения осуществляются через вашу функцию доступа), но оба подхода должны закончить нас быть одинаково эффективными (возможно, идентичными) для каждого элемента.
Если вы действительно хотите, чтобы конструктор копирования был эффективным, то двоичная копия более низкого уровня будет работать быстрее, чем членская копия. Но значительно «грязнее».
В целом, я предпочитаю получать доступ ко всем полям-членам через свойства / средства доступа, поскольку они лучше инкапсулируют их, позволяя вам изменять базовую реализацию / хранение поля без необходимости изменения какого-либо кода, который обращается к нему, кроме свойства / сам аксессор.