Devo gettare std :: bad_alloc?

2

Sto allocando memoria nello stack e la distribuisco manualmente ai puntatori condivisi. Finisco per fare qualcosa di simile all'avvio (l'ho semplificato ignorando i problemi di allineamento):

char pool[100];

std::shared_ptr<Obj> p = new(reinterpret_cast<void*>(pool)) Obj;
pool += sizeof(pool);

Naturalmente, è possibile che 100 non sia sufficiente, quindi in tal caso vorrei lanciare un'eccezione:

char pool[100];
char* poolLimit = pool + 100;

if (pool + sizeof(Obj) >= poolLimit)
  throw std::bad_alloc(); // is this a good idea?

std::shared_ptr<Obj> p = new(reinterpret_cast<void*>(pool)) Obj;
pool += sizeof(pool);

È corretto per lanciare un std::bad_alloc qui? O dovrei semplicemente lanciare std::runtime_error ?

    
posta quant 06.11.2014 - 02:05
fonte

1 risposta

3

(Suppongo che tu stia scrivendo un'applicazione in modalità utente qui, non un modulo del kernel, un driver di dispositivo o uno stack di rete).

Lancia std::bad_alloc . Solo un idiota cercherebbe di capirlo.

Ma non importa veramente perché l'applicazione è morta a quel punto comunque. Quello che vuoi è che l'applicazione si chiuda a quel punto in modo chiaro e non ambiguo. Chiamare abort sarebbe ancora meglio.

Se stai operando da un buffer fisso, devi davvero assicurarti che sia abbastanza grande per tutte le esigenze.

    
risposta data 06.11.2014 - 16:02
fonte

Leggi altre domande sui tag