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.