L'application se fermait directement à cause d'une instance qui n'avait pas été allouée avec l'opérateur new.
Comme j'avais dit le problème venait bien du constructeur. En fait il fallait appeler les 3 constructeurs des classes A, B, C pour le constructeur de D.
Liste des constructeurs:
//Constructeur de A
A()
{
pTata = new Tata();
}
//Constructeur de B
B() : A()
{
pTbtb = new Tbtb();
}
//Constructeur de C
C() : A()
{
pTctc = new Tctc();
}
//Constructeur de D
D() : A(), B(), C()
{
pTdtd = new Tdtd();
}
Comme ca lors de la construction de D, toutes les instances sont allouées et le programme tourne!