C ++: manipula recursos se os construtores puderem lançar exceções (Referência ao FAQ 17.4)

Obrigado por toda a resposta.

Eu reformatei minha pergunta para entender o estado do ponteiro de membro depois que o construtor de classe containg gera uma exceção

Mais uma vez meu exemplo de classe :)

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 (...)
      {}
}

O consturctor da classe foo lançaria uma exceção por algum motivo aleatório. Eu entendo que o destruidor de foo nunca será chamado mas neste caso o destruidor para p será chamado?

Que diferença faz para ter p como um ponteiro inteligente de impulso do que um ponteiro bruto para fred.

Obrigado.

questionAnswers(4)

yourAnswerToTheQuestion