This answer citazioni C++ 11 standard 3.8:Perché non si elimina un oggetto che ha un distruttore con un comportamento non definito di effetto collaterale in C++ 11?
se v'è alcuna chiamata esplicita alla distruttore o se un delete-espressione (5.3.5) non viene utilizzato per rilasciare l'archiviazione, il distruttore non sarà implicitamente chiamato e qualsiasi programma che dipende dagli e ff etti laterali prodotti dal distruttore ha un comportamento indefinito.
La parte sul distruttore che non viene chiamata è chiara. Ora supponiamo che il distruttore saltato abbia avuto un effetto collaterale che avrebbe dovuto influenzare il comportamento del programma.
Perché il comportamento del programma non è definito ora? Perché gli effetti collaterali non dovrebbero essere saltati (poiché il distruttore non viene chiamato) e il programma funziona normalmente solo senza effetti collaterali applicati?
Interessante domanda. Ma perché qualcuno non vorrebbe chiamare il distruttore su un oggetto quando non è più necessario? – ereOn
Se il distruttore in questo caso esegue attività non banali per ex: la chiusura degli handle delle risorse o lo stato di impostazione su qualcosa di valido ecc., Il distruttore non viene chiamato will ofcourse influenza il programma e genererà un comportamento indefinito.Non capisco la logica per saltare gli effetti collaterali. –
@ereOn: Singletons è stato menzionato come caso d'uso (tuttavia, questo non dovrebbe essere considerato un buon design). –