C ++: Ressourcen behandeln, wenn Konstruktoren Ausnahmen auslösen dürfen (Verweis auf FAQ 17.4)

Vielen Dank für die Antwort.

Ich habe meine Frage neu formatiert, um den Status des Elementzeigers zu verstehen, nachdem der Containg-Klassenkonstruktor eine Ausnahme ausgelöst hat

Wieder meine Beispielklasse :)

class Foo
{
public:
    Foo()
    {
       int error = 0;
        p = new Fred;

        throw error;  // Force throw , trying to understand what will happen to p
    }

   ~Foo()
    {
       if (p)
       {
           delete p;
           p = 0;
       }
     }
private:
   Fred* p;
};

int main()
{
      try
      {
         Foo* lptr = new Foo;
      }
      catch (...)
      {}
}

Der Konstruktor für class foo würde aus einem zufälligen Grund eine Ausnahme auslösen. Ich verstehe, dass der Destruktor von foo niemals aufgerufen wird, aber in diesem Fall wird der Destruktor für p aufgerufen?

Welchen Unterschied macht es, p als intelligenten Boost-Zeiger als rohen Zeiger auf Fred zu haben.

Vielen Dank.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage