title: Is it okay to manually throw an std::bad_alloc?
body: <p>I have this code..</p>
  
  <pre><code> 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-&gt;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&amp; exception)
      {
       // Couldn't allocate enough memory for the engine layer.
       return 0;
      }
   }
  </code></pre>
  
  <p>I've omitted most of the non-related information, but I think the picture is clear here.</p>
  
  <p>Is it okay to manually throw an std::bad_alloc instead of try/catching all of the layer creations individually and logging before rethrowing bad_allocs?</p>