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
?