Ho fatto qualche ricerca dopo l'apprendimento new
, a differenza di malloc()
a cui sono abituato, non restituisce NULL per allocazioni non riuscite e ho trovato che ci sono due modi distinti di verificare se il nuovo fosse o meno riuscito. Queste due vie sono:Nuovo (std :: nothrow) vs. Nuovo all'interno di un blocco try/catch
try
{
ptr = new int[1024];
}
catch(std::bad_alloc& exc)
{
assert();
};
e
ptr = new (std::nothrow) int[1024];
if(ptr == NULL)
assert();
Credo che i due modi raggiungere lo stesso obiettivo, (! Correggetemi se sbaglio ovviamente), quindi la mia domanda è questa:
che è l'opzione migliore per controllare se new
riuscito, basata interamente sulla leggibilità, manutenibilità, e la performance, trascurando c de facto ++ convenzione di programmazione.
Utilizzare le eccezioni. Rendono il tuo codice più significativo, locale, manutenibile e scalabile. –
Per quanto riguarda la leggibilità, sicuramente quella senza gestione delle eccezioni. Per quanto riguarda le prestazioni, forse anche il 'nothrow'. Ma sono sicuro che le eccezionaliste sosterranno. Ma se vuoi solo un semplice errore di asserzione, puoi anche usare la variante di lancio e omettere il gestore delle eccezioni;) –
Qual è il punto di quel codice? Stai rilevando un'eccezione specifica e significativa e poi ne crei una priva di significato tramite 'assert()' ... – Blindy