Secondo C++ reference, Potete nuovo un oggetto da:Perchè nuova versione std :: nothrow non viene ampiamente utilizzato
MyClass * p1 = new MyClass;
o
MyClass * p2 = new (std::nothrow) MyClass;
Il secondo restituisce un puntatore nullo, invece di lanciare un'eccezione
Tuttavia, difficilmente vedo questa versione nella mia esperienza.
Ad esempio, Google sconsiglia di utilizzare l'eccezione nel codice, ma non utilizzano la versione nothrow in Chromium, come posso vedere.
C'è qualche motivo per cui preferiamo quello predefinito rispetto a quello nothrow? Anche in un progetto che non utilizza l'eccezione?
- EDIT -
Follow up domanda: dovrei controllare il valore di ritorno di malloc()
?
Sembra, al contrario, molte persone consiglio per controllare il valore di ritorno di malloc, alcuni hanno detto, perché:
molti errori di allocazione non hanno nulla a che fare con l'essere esaurito la memoria. La frammentazione può causare il fallimento di un'assegnazione perché non è disponibile spazio contiguo sufficiente anche se la memoria è piena.
È vero? Perché trattiamo in questo caso malloc()
e new()
in questo caso?
Se il nuovo tentativo fallisce, è molto probabile che si esaurisca la memoria e sia necessario uscire comunque ... – Kelm
Nota che in altre lingue, come java, distinguiamo tra * un'eccezione * e un * errore * (che è * di solito * fatale). In java, la memoria insufficiente è un * errore * e NON un * eccezione *. – amit
Oltre a chiedere un'opinione, la tua domanda di chiusura sembra contraddittoria. Per definizione, se si utilizza la versione di lancio delle eccezioni, si utilizzano eccezioni, rendendo in tal modo discutibile il punto "Anche in un progetto che non utilizza eccezioni". Se con "non si usano eccezioni" si intende che non si hanno blocchi try-catch e quindi il runtime catturerà l'eccezione e terminerà il programma (di solito) si * lo * si usa usando le eccezioni; non stai semplicemente * gestendoli * nel tuo codice scritto. – WhozCraig