2012-06-11 22 views
8

¿Es válido llamar a alguna función en el destructor con el argumento this? La función no almacena el puntero, pero asume el objeto funcional completo.Uso de "esto" en el destructor

+1

El objeto es completamente válido hasta la última línea del DTOR. Por supuesto, si el DTOR rompe piezas del objeto (por ejemplo, anula ptr, etc.), entonces se está disparando en el pie, pero es completamente su código, no lo que genera el complemento ... –

Respuesta

14

this sigue siendo válido en el destructor.

Sin embargo, debe tener en cuenta que las funciones virtuales ya no funcionan correctamente como podría esperar una vez que se destruye el objeto; ver p. Never Call Virtual Functions during Construction or Destruction. Esencialmente, el tipo dinámico del objeto se modifica a medida que se completa cada destructor.

+4

** funcionar correctamente. Es solo la definición de funciones que funcionan correctamente es diferente. Quiero decir, funcionan como están diseñados. – valdo

+1

@valdo: ¡Buen punto! Modifiqué mi respuesta ... –

+2

O, de todos modos, la definición del comité de "trabajar adecuadamente" no es muy útil en la práctica. Estoy seguro de que es posible inventar algún caso de uso en el que desee llamar a las versiones de clase base de las funciones virtuales en la base ctor/dtor, y que el comité tenga algo así en mente. De lo contrario, habrían dado más libertad a las implementaciones, y simplemente dijeron que es UB para hacer la llamada. Eso probablemente sería más eficiente, ya que la implementación no tendría que seguir ajustando el puntero vtable (o equivalente) a medida que se completa cada dtor. Tal como está, pagamos por algo que no usamos. –

2

En una palabra: SÍ.
Es completamente válido para usar this en el D`TOR