Neue Zuweisung in C
Wenn in C der neue Operator keinen Speicher zuordnet, löst er eine std::bad_alloc-Ausnahme aus. Berichten zufolge weichen jedoch bestimmte Compiler wie VC6 von diesem Standard ab.
VC6-Verhalten
VC6 hält sich nicht an den C-Standard und gibt stattdessen 0 (oder NULL) zurück ), wenn die Speicherzuweisung fehlschlägt. Diese Nichtkonformität kann zu Code führen, der unordentlich aussieht, da nach jeder neuen Anweisung ständig nach NULL gesucht werden muss.
Lösung
Microsoft erkennt dieses Problem in Knowledge an Basisartikel KB276944. Um dies in VC6 zu umgehen, ermöglicht MSVC die Verknüpfung mit einem benutzerdefinierten neuen Handler. In neueren MSVC-Compilern (7.0 und höher) bietet die Verknüpfung mit der Objektdatei nothrownew.obj das gleiche Verhalten wie VC6.
VS2005 und darüber hinaus
MSVC 8.0 (VS2005 ) führte eine Änderung ein, bei der new nun standardmäßig standardmäßig std::bad_alloc auslöst. Die Option zur Rückgabe von 0 kann weiterhin mit dem Parameter std::nothrow angegeben werden, wie im bereitgestellten Codebeispiel gezeigt. Dies ist eine abwärtskompatible Lösung, die es ermöglicht, dass Code mit jeder Compilerversion funktioniert.
Das obige ist der detaillierte Inhalt vonWie unterscheidet sich die Speicherzuweisung in C in VC6 im Vergleich zu neueren Compilern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!