Конструктор копирования по умолчанию для типа C ++ работает, вызывая конструктор копирования для каждого поля в экземпляре с соответствующим полем в объекте, из которого создается копия. В вашем примере это примерно переводится как
Circle(const Circle& other) :
x(other.x),
y(other.y),
_neighobrs(other._neighbors) {
}
Является ли копия глубокой или нет - это деталь реализации конструктора копирования каждого поля. В этом случае конструктор копирования vector<T>
представляет собой смесь. Он будет глубоко копировать базовое хранилище, так что каждый vector<T>
имеет свой собственный независимый массив. Однако он будет копировать элементы, используя конструктор копирования. В данном случае это тип указателя, поэтому они копируются поверхностно