¿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
Respuesta
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.
** funcionar correctamente. Es solo la definición de funciones que funcionan correctamente es diferente. Quiero decir, funcionan como están diseñados. – valdo
@valdo: ¡Buen punto! Modifiqué mi respuesta ... –
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. –
En una palabra: SÍ.
Es completamente válido para usar this
en el D`TOR
- 1. Uso del destructor en C#?
- 2. derecho de uso de std :: uncaught_exception en un destructor
- 3. El uso de "esto" en cada clase de MATLAB
- 4. ¿Cuál es el uso de setupUi (esto) en Qt
- 5. node.js: Uso confuso de 'esto' en el ámbito global
- 6. Uso de GMock para verificar una llamada de destructor
- 7. cuánto hace el destructor predeterminado
- 8. El uso de "esto" como parámetro para copiar constructor
- 9. ¿El uso de bundle exec puede solucionar esto?
- 10. Cómo detectar el desenrollado de la pila en un Destructor
- 11. ¿Es predecible el destructor en PHP?
- 12. Debe proporcionar destructor en el PIMPL
- 13. Destructor en Objective-C++
- 14. Excepción en destructor
- 15. ¿Hay algún uso para hacer un destructor protegido virtual?
- 16. Destructor privado
- 17. Destructor en const char *
- 18. Smart pointers & destructor
- 19. Destructor crash
- 20. Uso no válido de 'esto' en la función no miembro
- 21. destructor estática
- 22. comportamiento de php destructor
- 23. destructor estático
- 24. ¿Están el constructor y el destructor predeterminados siempre en línea?
- 25. cuándo usar destructor en php?
- 26. referencia y destructor en C++
- 27. ¿Por qué el destructor de `boost :: multi_array_ref` no es virtual?
- 28. GCC comportamiento destructor
- 29. Escribiendo un destructor LinkedList?
- 30. ¿Llama explícitamente el resultado de destructor en Comportamiento indefinido aquí?
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 ... –