Wie testet man, ob der Autozeiger Null ist?

8

Ich bin neu im automatischen Zeiger. Ich habe das:

%Vor%

Wie prüfe ich, ob ich myPointer erfolgreich instanziieren kann? Ich habe if (myPointer==NULL) ausprobiert und der Compiler hat einen Fehler ausgegeben:

  

no operator "==" stimmt mit diesen Operanden überein.

    
user853069 15.08.2011, 20:03
quelle

5 Antworten

22

Was meinst du mit "instanziieren"?

Bei einer standardkonformen Implementierung war entweder die Konstruktion von MyClass erfolgreich oder es wurde eine Ausnahme ausgelöst, und der auto_ptr ist nicht mehr im Gültigkeitsbereich. In dem von Ihnen angegebenen Beispiel kann der Wert des von auto_ptr dargestellten Zeigers nicht% /% sein.

(Es ist möglich, dass Sie eine Implementierung ohne Ausnahmeunterstützung verwenden, die NULL bei fehlgeschlagenem Zuweisen zurückgeben kann (anstatt eine Ausnahme auszulösen), auch ohne die Verwendung des NULL - Spezifizierers, aber dies ist nicht der allgemeiner Fall.)

Im Allgemeinen können Sie den Wert des Zeigers überprüfen. Sie müssen sich nur die zugrunde liegende Repräsentation ansehen, denn, wie Sie herausgefunden haben, (nothrow) hat kein std::auto_ptr .

Verwenden Sie dazu operator== , wie folgt:

%Vor%

Beachten Sie auch, dass X* std::auto_ptr<X>::get() const throw() in C ++ 0x zugunsten von std::auto_ptr . Bevorzugen Sie Letzteres, wo Sie Zugriff auf eine konforme Implementierung haben.

    
Lightness Races in Orbit 15.08.2011, 20:05
quelle
4

Wie wäre es damit?

%Vor%     
Tae-Sung Shin 15.08.2011 20:06
quelle
3

Ich denke myPointer.get() == NULL ist was du suchst.

    
Jon 15.08.2011 20:06
quelle
1

Nach der Anweisung, die Sie in Ihre Frage geschrieben haben, ist entweder myPointer gesetzt oder es wurde eine Ausnahme ausgelöst, und das Abfangen der Ausnahme ist der richtige Weg, um zu überprüfen, ob etwas schief gegangen ist.

In jedem Fall können Sie den zugrunde liegenden Zeiger abrufen, indem Sie auto_ptr::get() aufrufen.

    
Nicola Musatti 15.08.2011 20:07
quelle
0

Wenn ich std::auto_ptr für NULL überprüfe, denke ich, dass dies die idiomatische Schreibweise ist:

%Vor%     
Wolf 19.05.2014 10:57
quelle

Tags und Links