Конструкторы и операторы присваивания генерируются компилятором, при отсутствии их пользовательских определений. Если вы напишете оператор =
как не член класса, то он все равно не будет вызван, потому что генерированным компилятором оператор имеет приоритет, и тем более будет нарушено правило одного определения.Поэтому оператор=
должен быть членом класса. Он не может быть статическим, поскольку имеет доступ к указателью this, который не статический, а именно, изменяется только целевой объект а не все объекты изменяются при изменении одного.