This MSDN page menziona che ci sono versioni nothrow di new
e delete
. nothrow new
è una cosa abbastanza nota: restituisce null invece di generare un'eccezione se l'allocazione della memoria fallisce. Ma che cos'è lo nothrow delete
menzionato qui?Cosa è nothrow delete in C++?
risposta
Probabilmente si riferiscono alle funzioni di allocazione della memoria non elaborata operator new
e operator delete
.
Quando si richiama una versione specifica di nuova collocazione espressione (cioè nuova espressione con parametri extra, ma tutti sono ufficialmente indicati come posizionamento forme di new
) e la funzione di allocazione di memoria operator new
riesce, ma il processo non riesce in seguito per qualche altro motivo (il costruttore lancia), l'implementazione deve interrompere il processo e rilasciare automaticamente la memoria allocata chiamando la versione appropriata di operator delete
. "Versione appropriata" di operator delete
in questo caso è la versione con lo stesso set di parametri della funzione operator new
precedentemente utilizzata per l'allocazione di memoria (ad eccezione del primo parametro, ovviamente).
Si applica anche alla versione di operator new
. Quando si utilizza una forma di espressione nuova nothrow
, si chiama una versione di operator new
e quindi si costruisce l'oggetto nella memoria allocata. Se il costruttore non riesce (genera), l'implementazione delle versioni di nuova espressione ha allocato la memoria con l'aiuto della versione nothrow
di operator delete
. Questo è fondamentalmente l'unica ragione per cui esiste questa versione di operator delete
.
In altre parole, la versione nothrow
di operator delete
esiste per scopi interni molto specifici. Normalmente non dovresti chiamarlo da te e, forse, non hai davvero bisogno di sapere della sua esistenza. Tuttavia, vale la pena sapere che per le ragioni sopra descritte, ogni volta che crei la tua versione di operator new
con parametri aggiuntivi, è sempre consigliabile fornire una versione corrispondente di operator delete
con lo stesso set di parametri aggiuntivi.
- 1. Come posso richiamare la versione nothrow di delete?
- 2. È delete [] uguale a per elemento delete. C++
- 3. Qual è l'equivalente di new/delete di C++ in C?
- 4. Cosa è ** in C++?
- 5. Cosa determina cosa viene scritto in un puntatore C++ quando viene chiamato delete?
- 6. C++ 11 Destructor = delete
- 7. cosa è l'operatore "??" in C#?
- 8. Cosa fa l'output_expression per "DELETE FROM table"?
- 9. Cosa succede durante l'istruzione `delete this;`?
- 10. C++ "delete" è lento. Dove dovrei guardare prima?
- 11. C++: cosa è :: per?
- 12. C++ nuovo/delete e char *
- 13. Che cosa fa l'istruzione USING MySQL in combinazione con DELETE?
- 14. C++ nuovo & delete e stringa e funzioni
- 15. vector, move semantics, nothrow e g ++ 4.7
- 16. Cosa è dealloc nell'obiettivo C
- 17. Cosa restituisce un DELETE MySQL di successo? Come verificare se DELETE ha avuto successo?
- 18. Bulk delete (truncate vs delete)
- 19. Cosa significa :: * in C++?
- 20. Cosa significa "&" in C++?
- 21. Perchè nuova versione std :: nothrow non viene ampiamente utilizzato
- 22. bulk delete in GIT?
- 23. Come consumare REST in C# inclusi PUT, POST e DELETE?
- 24. Cosa significa [,] in C#?
- 25. Cosa fa? in C?
- 26. Cosa sono [] in C#?
- 27. cosa significa ** in C
- 28. RESTful Http DELETE in. NET
- 29. C# assemblati, che cosa è un assieme?
- 30. Cosa non è nulla nell'obiettivo C?