MenüHomeBlogMagic

c++ NULL referenzen

Des öfteren schreibt man in c++ eine Methode die als Rückgabe wert eine Refernce auf einen Member zurück gibt.
Bei Listen z.B. kann es vorkommen dass das gesucht Element nicht existiert, aber was gibt man dann zurück?

In meinem CcOS-Framework habe ich mich dafür entschieden einen reference auf den pointer NULL zurück zu geben.
Dies geschieht über folgendes #define:

#define CCNULLREF(object) *(object*)(nullptr)

Um zum Beispiel eine null Refernze auf einen String zurück zu geben, kann folgendes geschrieben werden: CCNULLREF(CcString);

Sollte es notwendig werden einen Rückgabewert auf eine NULL Refernez zu prüfen kann folgendes #define genutzt werden:

#define ISNULLREF(object) (static_cast<const void*>(&object) == nullptr)

Auf eine solche NULL-Referenz darf niemals zugegriffen werden, das hat immer einen Absturz zu folge.
Deshalb sollte diese Methode vermieden werden wenn es möglich ist und stattdessen evtl eine statische Variable definiert werden welche Global als NULL Referenz bekannt ist.

Beispiel:

#include "CcConsole.h"
#include "CcString.h"

#define CCNULLREF(object) *(object*)(nullptr)
#define ISNULLREF(object) (static_cast<const void*>(&object) == nullptr)

CcString& nullRefString()
{
  return CCNULLREF(CcString);
}

int main(int argc, char** argv)
{
  CcString& sTestString = nullRefString();
  if(ISNULLREF(sTestString))
  {
    CcConsole::writeLine("This refernce was a null reference.");
  }
  return 0;
}
Permalink: https://adirmeier.de/Blog/ID_184
Tags: Blog, c/c++, referencesvon am 2018-01-17