Ta première version if(pImage) delete pImage;
vérifie si le pointeur est là. Comme tu l'as déclaré, ça fonctionnera bien. Tu devrais le définir sur NULL lorsque tu le déclares c'est-à-dire pImage = NULL; de sorte que si le pointeur ne pointe vers rien, la ligne sera ignorée. Au cas où quelque chose serait alloué, la ligne ci-dessus va (si l'instruction devient vraie) désallouer la mémoire qui lui a été allouée. N'oublie pas que pImage doit être une mémoire allouée DYNAMIQUEMENT et qu'après le delete, ELLE NE DOIT JAMAIS ÊTRE ACCÉDÉE sinon une erreur sera générée à nouveau.
ta deuxième version if(!pImage) delete pImage
est logiquement incorrecte. Cela signifie que SI pImage n'existe pas, supprime-le donc cette instruction IF devient fausse. Par bonne pratique, si tu avais rendu ce pointeur NULL, cela t'aurait donné une erreur ici étant donné que c'est logiquement incorrect. TU dis SI pImage N'EXISTE PAS, SUPPRIME-LE !!!!!!! Donc la ligne va probablement être ignorée quand elle aura alloué de la mémoire.
(LE VRAI PROBLÈME EST QUE TU DEVRAIS TOUJOURS DÉFINIR UN POINTEUR SUR NULL lors de sa déclaration. Fais ça, et tu es bon pour continuer.