A pesar de lo que se ha dicho hasta ahora, hay al menos un escenario cuando una llamada explícita a clear
en el destructor podría ser necesaria.
Imagine la situación cuando el objeto que se destruye tiene varios objetos subobjetos miembros, que requieren un orden de destrucción específico, es decir, los subobjetos dependen uno del otro y un orden incorrecto de destrucción provocará resultados no deseados. Como probablemente sepa, el orden de destrucción del subobjeto del miembro (así como la inicialización del miembro) está determinado por el orden de la declaración de los miembros en la definición de la clase. Por lo tanto, una forma de lograr el orden correcto de destrucción es organizar las declaraciones de los miembros en consecuencia. Sin embargo, en primer lugar, esta no es una solución muy buena para el mantenimiento. En segundo lugar, el orden deseado de destrucción podría depender de algunas condiciones de tiempo de ejecución. En tercer lugar, el orden deseado de destrucción podría contradecir el orden de inicialización deseado. Todo esto significa que podría no ser posible (o sabio) ordenar el orden apropiado de destrucción mediante la reorganización de las declaraciones.
Un enfoque razonable en este caso podría ser la limpieza manual de algunos subobjetos de miembros críticos, llamando a sus métodos clean
o similares, hasta que la dependencia de la orden de destrucción "desaparezca". Supongo que quizás el código que viste estaba tratando de resolver el problema de pedidos llamando al clean
en un subobjeto vector
estratégicamente seleccionado.
En cuanto a llamar al clean
en el constructor ... No tengo idea de por qué alguien haría algo así.
nice term, 'voodoo programming' :) – xtofl
Establecer un puntero a null no es vudú, ayuda mucho en la depuración. También evita que elimines el mismo puntero dos veces, pero nadie lo hace, ¿verdad? –
En todo caso, desea saber que ha eliminado el mismo puntero dos veces. Es mejor fallar ruidosamente (y descubrirlo) que tener éxito accidentalmente (enmascarar un error que volverá a morderlo) –