La regla de tres es una regla general que se resume en:

Si una clase necesita escribir un destructor, constructor de copia o operador de asignación, probablemente necesite definir los tres.

Si se necesita escribir el código de cualquiera de estos constructores, quiere decir que la gestión de los recursos no es trivial y queremos un comportamiento distinto al que el compilador genera por defecto, que es realizar copias superficiales de los miembros de la clase.

Si se piensa detenidamente, tanto el constructor por defecto y el operador de asignación tratan de resolver el mismo problema: la copia de objetos. Si se necesita escribir uno, se necesita escribir el otro necesariamente. En cuánto al destructor, al requerir atención especial en las copias, se debe realizar una liberación de recursos adecuada.

Esto es todo sobre la regla del tres. Es conveniente conocerla para así no pasar por alto el resto de métodos que debemos implementar y evitar así errores que pasen desapercibidos.

Para profundizar más recomiendo una vez más el excelente blog fluentcpp de dónde explica este concepto.