Eğer varsa: Bundan sonra ne olacak func
sanal olup olmadığına bağlıdır
MyObject *o = NULL;
o->func();
. Eğer öyleyse, o zaman çökecektir, çünkü vtable'ı almak için bir nesneye ihtiyacı vardır. Ancak sanal değilse, çağrı bu işaretçi NULL olarak ayarlanmış olarak ilerler.
Standartın bunun "tanımlanmamış davranış" olduğunu söylediği, her şeyin olabileceği, ancak tipik derleyicilerin yalnızca işaretçinin NULL olup olmadığını denetlememesi için kod oluşturduğuna inanıyorum. Bazı iyi bilinen kütüphaneler, tanımladığım davranışa güvenir: MFC, bir boş gösterici üzerinde çağrılabilen SafeGetHandle
gibi bir işlevi vardır ve bu durumda NULL değerini döndürür.
Sen yeniden kullanılabilir yardımcı işlevi yazmak isteyebilirsiniz:
void CheckNotNull(void *p)
{
if (p == NULL)
throw NullPointerException();
}
Ardından this
dahil tüm argümanları kontrol etmek için bir fonksiyonun başlangıcında bu kullanabilirsiniz:
CheckNotNull(this);
Bu .net özgü midir? - Bu etiketi değiştirmek isteyebilirsiniz, C++ kullanıcıları çok süzülecek. Net –
NullPointerException, bunun bir C++ sorusu olmadığını düşünüyor. C#? – Tom