¿Qué es la regla de cinco, y qué genera el compilador por ti?
Si una clase necesita un destructor, constructor de copia o asignación de copia personalizados, casi seguro necesita los cinco más el constructor de movimiento y la asignación de movimiento — porque posee un recurso. El compilador los genera implícitamente, pero declarar cualquiera de ellos suprime algunos de los otros: escribir un destructor detiene la generación de las operaciones de movimiento, y las copias toman silenciosamente su lugar. La regla de cero es aún mejor — poseer recursos a través de miembros que ya se gestionan a sí mismos.