Se avessi una monetina ogni volta che ho visto questa macro in uso, oggi scriverei solo per divertimento:
#define SAFE_DELETE(p) if ((p) != NULL) { delete (p); (p) = NULL; }
Perché i programmatori insistono nel continuare a utilizzare questa macro quando delete
verifica la presenza di null? È perché imposta il puntatore su null alla fine? Allora perché non riscriverlo almeno e rimuovere il controllo ridondante:
#define SAFE_DELETE(p) { delete (p); (p) = NULL; }
Tuttavia, non sembra una buona pratica.