NULL in Instanziierung

7

Wenn wir C ++ schreiben, nehmen wir die folgende Codezeile an:

%Vor%

Wenn diese Zeile kompiliert wird und keine Ausnahmen oder andere sichtbare Fehler verursacht Laufzeitprobleme, kann obj gleich nach der Ausführung dieser Zeile NULL sein?

    
user181218 12.06.2011, 07:51
quelle

4 Antworten

14

Nein, obj kann nicht NULL sein.

Wenn new fehlschlägt, wird eine std::bad_alloc Ausnahme ausgelöst. Wenn keine Ausnahme ausgelöst wurde, zeigt obj garantiert auf eine vollständig initialisierte Instanz von Object .

Es gibt eine Variante von new , die keine Ausnahme auslöst

%Vor%

In diesem Fall wird obj NULL sein, wenn new fehlschlägt, und die std::bad_alloc Ausnahme wird nicht ausgelöst (obwohl der Konstruktor von Object natürlich immer noch Ausnahmen auslösen kann).

Bei einigen älteren Compilern gibt new möglicherweise keine Ausnahme aus und gibt stattdessen NULL zurück, aber dies ist kein standardkonformes Verhalten.

Wenn Sie operator new überladen haben, verhält es sich je nach Ihrer Implementierung möglicherweise anders.

    
Sven 12.06.2011, 07:55
quelle
4

Nein, Ihre genaue Linie kann sich nicht so verhalten. obj zeigt immer auf gültigen Speicher, wenn keine Ausnahmen ausgelöst werden. Die folgende Zeile gibt jedoch 0 zurück, wenn der Speicher nicht zugewiesen werden konnte:

%Vor%     
Xeo 12.06.2011 07:55
quelle
3

new throws std::bad_alloc Die Zuweisung war nicht erfolgreich. Also solltest du diese Ausnahme verstehen Sie sollten nothrow new verwenden, wenn Sie nach NULL nach new.

suchen möchten     
Alok Save 12.06.2011 07:55
quelle
2

Nein, es sei denn, Sie haben Ausnahmen deaktiviert oder std::new überlastet, um etwas anderes als das Standardprogramm zu tun (das std::bad_alloc bei einem Fehler auslöst).

(Ich bin mir nicht sicher, wie std::new sich verhält, wenn Ausnahmen deaktiviert sind, aber eine Diskussion darüber ist verfügbar hier ...)

    
littleadv 12.06.2011 07:53
quelle

Tags und Links