Come sovraccarico un distruttore?Come sovraccaricare un distruttore?
risposta
Non è possibile. C'è solo un distruttore per classe in C++.
Quello che puoi fare è creare un distruttore privato e poi disporre di diversi metodi pubblici che chiamano il distruttore in modi nuovi e interessanti.
class Foo {
~Foo() { ... }
public:
DestroyFoo(int) { ... };
DestroyFoo(std::string) { ... }
};
non ucciderebbe RAII? – Qberticus
@Qberticus, sì, lo farebbe in qualche modo. Non c'è ancora nulla che impedisca all'OP di creare una classe aggiuntiva che abbia RAII semplice e che distrugga Foo in un modo interessante.Senza ulteriori informazioni dall'OP non posso dirlo. Spero che il PO lo abbia preso in considerazione e ne tenga conto nella sua soluzione. – JaredPar
Questo è privato * distruttore * ... –
Non puoi! Ogni classe può avere solo un distruttore. Come potresti averne più di uno? Il distruttore viene attivato automaticamente; non c'è modo che la lingua possa sapere quale chiamare.
I distruttori virtuali, tuttavia, sono un'altra questione.
Non è così. Non puoi avere 2 distruttori in una classe.
Cosa stai cercando di realizzare?
Il sovraccarico significa avere diverse funzioni con lo stesso nome che richiedono argomenti diversi. Come swap(int &a, int &b)
e swap(double &a, double &b)
. Un distruttore non accetta argomenti. Sovraccaricare non avrebbe senso.
Se è necessario fare cose diverse quando si distrugge un oggetto in base a determinate circostanze, è sufficiente disporre delle istruzioni appropriate if nel distruttore per verificare tali circostanze.
Domanda interessante ma l'unica ragione per cui si vorrebbe sovraccaricare un distruttore sarebbe perché si desidera liberare alcune risorse in un distruttore e lasciarle indietro in un altro, giusto?
Fondamentalmente, è possibile ottenere tale comportamento dal proprio distruttore utilizzando un valore booleano aggiuntivo che indica se una risorsa specifica deve essere liberata o meno. Questo booleano verrebbe impostato nel costruttore e/o in uno dei tuoi altri metodi e nel distruttore controllerai se è impostato. Se non è impostato, libererai la risorsa. Altrimenti, lasci la risorsa e probabilmente qualche altra attività la libererà. (Questo ha senso quando si condividono risorse tra più oggetti.)
Il motivo per cui non è possibile sovraccaricare un distruttore è perché il codice non ha la minima idea di quale distruttore deve chiamare quando si distrugge un oggetto . A meno che non chiami male i distruttori ma poi ti stai comportando male! ;-)
Non sovraccaricare il distruttore perché non lo si chiama mai. Questo è l'essenza di base di esso. (Da cosa siamo passati in classe.)
- 1. Il distruttore predefinito può essere generato automaticamente come distruttore virtuale?
- 2. C'è un distruttore in typeScript
- 3. __del__ è davvero un distruttore?
- 4. Scrittura di un distruttore LinkedList?
- 5. Quando dovrei creare un distruttore?
- 6. è possibile sovraccaricare un metodo finale
- 7. Impossibile sovraccaricare python socket.send
- 8. Distruttore privato
- 9. Come impedire a un metodo di sovraccaricare Java?
- 10. Un distruttore distruggerà un membro statico?
- 11. Come sovraccaricare | = operatore su enumerato ambito?
- 12. Come posso chiamare un distruttore privato da un shared_ptr?
- 13. Come sovraccaricare l'operatore di riferimento indiretto? (C++)
- 14. distruttore statica
- 15. Come sovraccaricare la funzione Scala applicare metodi
- 16. Come sovraccaricare il metodo __bool__ di Python?
- 17. Come sovraccaricare l'operatore << per qDebug
- 18. Come sovraccaricare l'operatore di una classe annidata?
- 19. Come posso sovraccaricare l'operatore + = "più uguale a"?
- 20. distruttore di un oggetto statico costruito all'interno il distruttore di un altro oggetto statico
- 21. Una classe VB6 ha un distruttore?
- 22. Un distruttore - dovrei usare cancellare o cancellare []?
- 23. È legale chiamare un distruttore su int32_t?
- 24. Implementazione di un distruttore virtuale in C++
- 25. Distruttore di Angularjs Controller
- 26. Perché enable_shared_from_this ha un distruttore non virtuale?
- 27. Quando il distruttore chiama un servizio WCF
- 28. Arresto anomalo del distruttore
- 29. Distruttore virtuale CRT
- 30. Come rilevare lo srotolamento dello stack in un distruttore
Dal momento che non puoi, hai avuto un'idea di come usare un distruttore sovraccarico, o sei solo curioso? Se vuoi fare qualcosa di diverso da creare solo due distruttori per una classe, portalo su e possiamo discutere su come realizzarlo. –
Mi chiedo se fosse possibile, come ti aspetteresti che si comporti? –
Era una domanda sollevata da qualcun altro. Volevano vedere quanto velocemente SO avrebbe risposto. – Joshua