Initialisieren eines Verweises auf Member auf NULL in C ++
Ist es möglich, die Initialisierung eines Referenz-member NULL in c++?
Ich versuche, so etwas wie dieses:
class BigClass
{
private:
Object m_inner;
public:
const Object& ReadOnly;
BigClass() : ReadOnly(NULL)
{
Do stuff.
}
};
Ich weiß, ich kann dies tun, wenn ich initialisieren "ReadOnly" zu einer echten Referenz zu einem Objekt, aber wenn ich will, um dort "NULL", bekomme ich die Fehlermeldung:
"cannot convert from 'int' to 'const Object &'
Wie kann ich dieses Problem lösen?
InformationsquelleAutor der Frage Idov | 2012-01-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, Verweise nicht
NULL
in C++.1Den möglichen Lösungen gehören:
Object
- Instanz, die verwendet werden können, um anzuzeigen, "kein Objekt".[1] Aus dem C++11-standard:
InformationsquelleAutor der Antwort Oliver Charlesworth
Kann man nicht "lösen". Verwenden Sie einen Zeiger, wenn Sie wollen in der Lage sein, dass die nicht Punkt-zu nichts.
Referenzen müssen initialisiert werden, um ein echtes Objekt, Sie kann nicht "Punkt" dem nichts".
InformationsquelleAutor der Antwort Mat
Es kann getan werden, aber es ist mit ziemlicher Sicherheit ein extrem schlechte Idee. Die Art und Weise, es zu tun, ist zu dereferenzieren, ist ein entsprechend typisiertes
NULL
- pointer, die schon zeigt, dass es eine schlechte Idee ist: Sie kommen zu undefiniertem Verhalten an dieser Stelle, die jedoch in der Regel neigt dazu, zu "arbeiten".In C++ Referenzen gemeint sind, beziehen sich immer auf ein Tatsächliches Objekt. Dies unterscheidet sich von anderen Programmiersprachen, wo "Referenzen" sind eigentlich das äquivalent Zeiger in C++ (in der Regel ohne Dinge wie pointer Arithmetik). Was Sie wahrscheinlich wirklich wollen (Sie hat leider nicht sagen, was Sie versuchen zu erreichen, es aber die Frage auf, über eine Lösung für ein problem, das wahrscheinlich Teil eines fehlgeleiteten Ansatz) ist die Verwendung eines Zeigers statt:
InformationsquelleAutor der Antwort Dietmar Kühl
Verwenden Sie einen Zeiger:-
const Object* pReadOnly;
InformationsquelleAutor der Antwort QuentinUK
Es ist nützlich beim schreiben von unit-tests. Das ist die nur sollte es getan werden, aber dort ist es sehr hilfreich.
Hier bin ich Test-code, welcher verwendet
MockClass
nichtMockClass
selbst.Es ist kein Allheilmittel, aber es kann helfen. Auch, GoogleMock könnte dein Freund sein, wenn Sie spöttisch "konkrete" Klassen.
InformationsquelleAutor der Antwort cdunn2001