J'ai ce code ..Est-il acceptable de lancer manuellement un fichier std :: bad_alloc?
CEngineLayer::CEngineLayer(void)
{
// Incoming creation of layers. Wrapping all of this in a try/catch block is
// not helpful if logging of errors will happen.
logger = new (std::nothrow) CLogger(this);
if(logger == 0)
{
std::bad_alloc exception;
throw exception;
}
videoLayer = new (std::nothrow) CVideoLayer(this);
if(videoLayer == 0)
{
logger->log("Unable to create the video layer!");
std::bad_alloc exception;
throw exception;
}
}
IEngineLayer* createEngineLayer(void)
{
// Using std::nothrow would be a bad idea here as catching things thrown
// from the constructor is needed.
try
{
CEngineLayer* newLayer = new CEngineLayer;
return (IEngineLayer*)newLayer;
}
catch(std::bad_alloc& exception)
{
// Couldn't allocate enough memory for the engine layer.
return 0;
}
}
J'ai omis la plupart des informations non liées, mais je pense que l'image est clair.
Est-il acceptable de lancer manuellement un fichier std :: bad_alloc au lieu d'essayer/capturer toutes les créations de calques individuellement et de les consigner avant de relancer bad_allocs?
Une petite note, si vous n'utilisez pas de pointeur intelligent pour logger, cela risque de fuir si le constructeur de CVideoLayer se lance. –
J'ai édité la couche vidéo car je n'ai pas encore de couche vidéo et je voulais montrer mon problème. J'ai décidé de le rendre simple plutôt que précis. – Jookia