Un collega ha insistito sull'uso di Meyer Singleton per tutte le variabili globali del puntatore come "non è garantito che la costruzione del globale unique_ptr
non venga generata". Così, invece di:Quando sostituire uno std globale :: unique_ptr con un singleton
#include <memory>
std::unique_ptr<Foo> ptr(nullptr); // Apparently this isn't safe.
int main(/*blah*/)
{
ptr.reset(new Foo());
}
Ora abbiamo
unique_ptr<Foo> singleton
{
try
{
static unique_ptr<Foo> ptr();
return ptr;
}
catch (...)
{
std::cerr << "Failed to create single instance\n";
exit(1);
}
return unique_ptr<Type>();
}
int main()
{
}
A me questa sembra una soluzione in cerca di un problema. Ha un punto?
Inoltre, direi che catturare l'eccezione, e quindi fare un'uscita (e buttare via ogni possibilità di capire perché ha fallito), sembra un'idea peggiore. La maggior parte dei sistemi, un'eccezione non gestita termina AND produce un output di debug (come un file core). –