È valido chiamare qualche funzione in destructor con argomento this
? La funzione non memorizza il puntatore, ma assume l'oggetto funzionale completo.Utilizzo di "this" in destructor
risposta
this
è ancora valido nel distruttore.
Tuttavia, è necessario tenere presente che le funzioni virtuali non funzionano più correttamente come ci si potrebbe aspettare una volta che l'oggetto viene distrutto; vedere per es. Never Call Virtual Functions during Construction or Destruction. In sostanza, il tipo dinamico dell'oggetto viene modificato al completamento di ogni distruttore.
Loro ** fanno ** lavorare bene. È solo la definizione di funzioni correttamente funzionanti è diversa. Voglio dire - funzionano come progettati. – valdo
@valdo: punto giusto! Ho modificato la mia risposta ... –
O comunque, la definizione del comitato di "funzionare correttamente" non è molto utile nella pratica. Sono sicuro che è possibile inventare un caso d'uso in cui si desidera chiamare le versioni di classe base delle funzioni virtuali nel ctor/dtor di base e che il comitato aveva in mente qualcosa del genere. Altrimenti avrebbero dato maggiore libertà alle implementazioni, e hanno appena detto che è UB a fare la chiamata. Questo sarebbe probabilmente più efficiente, dal momento che l'implementazione non dovrebbe continuare a regolare il puntatore del vtable (o equivalente) al completamento di ogni dtor. Così com'è, paghiamo per qualcosa che non usiamo. –
In una parola: SÌ.
È completamente valido per utilizzare this
nel D`TOR
- 1. Utilizzo di '$ (this)' In A Function
- 2. Utilizzo di "this" in anonimo, IDE: utilizzo potenzialmente non valido
- 3. Destructor in Objective-C++
- 4. Destructor in Asp.net
- 5. Pimpl + QSharedPointer - Destructor = Disaster
- 6. $ (this) vs this in jQuery
- 7. Binary Search Tree Destructor
- 8. C++ 11 Destructor = delete
- 9. Esiste un caso di utilizzo per non utilizzare "this" quando si chiama GC.SuppressFinalize (this)?
- 10. Protetto contro il private Destructor
- 11. Constructor/Destructor ordine di chiamata sulla pila
- 12. Ereditarietà gerarchia: Constructor & Destructor sequenza di esecuzione
- 13. Valore di "this" in Javascript
- 14. C#/CLI: Destructor non chiamato se Dispose() utilizzato in esso
- 15. Utilizzo $ this, self ::, parent :: per la leggibilità del codice
- 16. Utilizzo della parola chiave "this" nei costruttori Java
- 17. Java ".addActionListener (this)"
- 18. Ottieni $ this in angularjs
- 19. Perché il mio Backbone.View.constructor .__ super__ undefined se utilizzo _.bindAll (this)
- 20. determinazione $ (this) in jquery
- 21. `this` Digitare in Scala
- 22. questo vs $ (this)
- 23. std :: enable_shared_from_this: è consentito chiamare shared_from_this() in destructor?
- 24. $ (this) OR event.target OR var input = $ (this)
- 25. (1, eval) ('this') vs eval ('this') in JavaScript?
- 26. Differenza tra destructor, dispose e finalize method
- 27. Dovrei usare `this` all'interno di una classe?
- 28. Differenza tra $ (this) e questo in jQuery
- 29. Esiste un equivalente di "this" in powershell?
- 30. Memorizzazione di $ (this) in una variabile
L'oggetto è completamente valido fino all'ultima riga del DTOR. Ovviamente se il DTOR stesso distrugge pezzi dell'oggetto (ad esempio nulls fuori ptr ecc.) Allora ti stai sparando al piede, ma è interamente il tuo codice, non quello che genera il cpler ... –