¿El generador de asignaciones genera la protección del operador contra la auto asignación?
No, no es así. Simplemente realiza una copia de miembro a miembro, donde cada miembro es copiado por su propio operador de asignación (que también puede ser declarado por el programador o generado por el compilador).
¿Siempre tengo que protegerme contra la autoasignación incluso cuando los miembros de la clase no son de tipo puntero?
No, no lo hace si todos los atributos de su clase (y por lo tanto de ellos) son POD-types.
Al escribir sus propios operadores de asignación, es posible que desee verificar la autoasignación si desea preparar su clase para el futuro, incluso si no contienen punteros, y otros. También considere the copy-and-swap idiom.
No, no hay nada de malo en eso. Y no creo que haya algo contra lo que "proteger", realmente. EDIT: ¿Estás hablando de un copy-constructor? –
Si los miembros de la clase no son punteros/tipos inteligentes, la respuesta es no. No hay necesidad de protegerse contra eso. El comportamiento es el mismo que para POD (datos antiguos simples) en ese caso ... – 0xC0000022L