Wie funktioniert shared_ptr Arbeit in if-Bedingung
In C++ kann ich etwas schreiben wie:
shared_ptr<A> a_sp = someFunctionReturningSharedPtr();
if (a_sp) {
cout << a_sp->someData << endl;
} else {
cout << "Shared Pointer is NULL << endl;
}
Warum if (a_sp)
überprüfen, korrekt? a_sp
ist nicht ein boolean, aber wie ist es aktiviert für true oder false? Wie funktioniert die if-Bedingung kennen, um zu überprüfen das Ergebnis der a_sp.get()
Funktion? Oder wenn nicht, wie ist die NULL
keit der a_sp
überprüft? Gibt es eine Funktion in shared_ptr
definiert, konvertiert es in einen booleschen Wert?
Du musst angemeldet sein, um einen Kommentar abzugeben.
shared_ptr
hat eineoperator unspecified-bool-type() const
, die erlaubt, dass es in der booleschen Kontexten. Die unspecified-bool-Typ ist in der Regel definiert als ein Zeiger auf eine Funktion oder Zeiger auf member-Funktion, zu verbieten zufälligen passende bool Funktion überschreibt.In
C++0x
die Sprache ist zu verwendenexplicit operator bool() const;
, die verbietet implizite Konvertierungen (wie Funktionsaufrufe, conversions zuint
für Arithmetik, und so weiter), aber immer noch erlaubt dieshared_ptr
konvertiert bool Boolesche Kontexte.operator unspecified-bool-type()
. Ich habe nicht gesehen vorher. Ist das etwas besonderes zu steigern?shared_ptr hat operator bool(), welche true zurückgibt, wenn es nicht leer ist.
Dies ist zum Beispiel Microsoft-Implementierung von shared_ptr::operator bool(): http://msdn.microsoft.com/en-us/library/bb982901.aspx
shared_ptr::operator boolean-Typ - Tests, wenn eine eigene Ressource vorhanden ist.