La desventaja de NULL en C++ es que es una definición para 0. Este es un valor que puede convertirse silenciosamente en puntero, un valor bool, un flotante/doble o un int.
Eso no es muy seguro y ha dado lugar a errores reales en una aplicación en la que trabajé.
Considera:
void Foo(int i);
void Foo(Bar* b);
void Foo(bool b);
main()
{
Foo(0);
Foo(NULL); // same as Foo(0)
}
C++ 11 define un nullptr
que es convertible en un puntero nulo pero no a otros escalares. Esto es compatible con todos los compiladores modernos de C++, incluido VC++ a partir de 2008. En las versiones anteriores de GCC hay una característica similar, pero luego se llamaba __null
.
tenga en cuenta que 'NULL == 0' es solo una convención. NULL se puede definir con algún otro valor, aunque sería un caso raro. –
Me gustaría plantear esto al revés: si te estás refiriendo semánticamente a un puntero no válido, ¿por qué * no usarías * NULL, que es exactamente eso? –
Seguramente esta es una pregunta duplicada. –