Share via


operator new (<new>)

Die Funktion, die durch einen neuen Ausdruck aufgerufen wurde, um Speicher für einzelne Objekte zuzuweisen.

void* operator new(
   std::size_t _Count
) throw(bad_alloc);
void* operator new(
   std::size_t _Count,        
   const std::nothrow_t&
) throw( );
void* operator new(
   std::size_t _Count, 
   void* _Ptr
) throw( );

Parameter

  • _Count
    Die zuzuordnende Speichermenge in Byte.

  • _Ptr
    Der Zeiger zurückgegeben werden.

Rückgabewert

Ein Zeiger auf die niedrigste Byteadresse des neu zugeordneten Speichers.Oder _Ptr.

Hinweise

Die erste Funktion wird durch einen neuen Ausdruck aufgerufen, um _Count Bytes Speicher zuzuordnen entsprechend ausgerichtet, um jedes Objekt dieser Größe darzustellen.Das Programm kann eine alternative Funktion mit dieser Funktionssignatur definieren, die die Standardversion ersetzt, die durch die C++-Standardbibliothek definiert ist und somit als austauschbar.

Das erforderliche Verhalten ist, einen Nicht-NULL-Zeiger zurückzugeben, wenn Speicher zugewiesen werden kann, wie angefordert wurde.Jede dieser Zuordnung ergibt einen Zeiger auf den Speicher, der von jedem anderen zugeordneten Speicher disjunkt ist.Die Reihenfolge und die Kontiguität des Speichers zugeordnet durch aufeinander folgende Aufrufe ist nicht angegeben.Der ursprüngliche gespeicherte Wert ist nicht angegeben.Der zurückgegebene Zeiger verweist auf das Starten (niedrigste Byteadresse) des zugeordneten Speichers.Wenn Anzahl null ist, vergleicht der Wert, der zurückgegeben wird, nicht gleich einen anderen Wert, der von der Funktion zurückgegeben wird.

Das Standardverhalten ist, eine Schleife auszuführen.Innerhalb der Schleife versucht die Funktion zuerst, den angeforderten Speicher zuzuordnen.Ob der Versuch erforderlich ist, ist ein Aufruf malloc(size_t) nicht angegeben.Wenn der Test erfolgreich ist, gibt die Funktion einen Zeiger auf den zugeordneten Speicher zurück.Andernfalls die Funktionsaufrufe festgelegte neuen Handler.Wenn die aufgerufene Funktion zurückgibt, die Schleifenwiederholungen.Die Schleife beendet wird, wenn versucht, den angeforderten Speicher zuzuordnen erfolgreich ist, oder wenn eine aufgerufene Funktion nicht zurückgibt.

Das erforderliche Verhalten eines neuen Handlers ist, einen der folgenden Vorgänge auszuführen:

  • Erstellen Sie mehr Speicherplatz für Zuordnung bereit und kehren Sie dann zurück.

  • Rufen Sie entweder abort oder exit an (int).

  • Lösen Sie ein Objekt des Typs bad_alloc. aus

Das Standardverhalten von neuen Handler ist, ein Objekt des Typs bad_alloc auszulösen.Ein NULL-Zeiger legt den standardmäßigen neuen Handler fest.

Die Reihenfolge und die Kontiguität des Speichers zugeordnet durch aufeinander folgende Aufrufe operator new(size_t) wird nicht angegeben, wie die Anfangswerte, die dort gespeichert werden.

Die zweite Funktion wird durch einen neuen Ausdruck der Platzierung aufgerufen, um _Count Bytes Speicher zuzuordnen entsprechend ausgerichtet, um jedes Objekt dieser Größe darzustellen.Das Programm kann eine alternative Funktion mit dieser Funktionssignatur definieren, die die Standardversion ersetzt, die durch die C++-Standardbibliothek definiert ist und somit als austauschbar.

Das Standardverhalten ist, operator new(_Count) zurückzugeben wenn diese Funktion folgt.Andernfalls gibt es einen NULL-Zeiger zurück.

Die dritte Funktion wird durch einen new-Platzierungsausdruck im Format new (args) T aufgerufen.Hier besteht args aus einem einzelnen Objektzeiger.Dies kann beim Erstellen eines Objekts an einer bekannten Adresse hilfreich sein.Die Funktion gibt _Ptr zurück.

So freien Speicher belegt wurde operator new, Aufruf Operator.

Informationen zum auslösendes oder nonthrowing Verhalten von neuem, finden Sie unter Das neue und die delet-Operatoren.

Beispiel

// new_op_new.cpp
// compile with: /EHsc
#include<new>
#include<iostream>

using namespace std;

class MyClass 
{
public: 
   MyClass( )
   {
      cout << "Construction MyClass." << this << endl;
   };

   ~MyClass( )
   {
      imember = 0; cout << "Destructing MyClass." << this << endl;
   };
   int imember;
};

int main( ) 
{
   // The first form of new delete
   MyClass* fPtr = new MyClass;
   delete fPtr;

   // The second form of new delete
   MyClass* fPtr2 = new( nothrow ) MyClass;
   delete fPtr2;

   // The third form of new delete
   char x[sizeof( MyClass )];
   MyClass* fPtr3 = new( &x[0] ) MyClass;
   fPtr3 -> ~MyClass();
   cout << "The address of x[0] is : " << ( void* )&x[0] << endl;
}

Beispiels-Ausgabe

Construction MyClass.000B3F30
Destructing MyClass.000B3F30
Construction MyClass.000B3F30
Destructing MyClass.000B3F30
Construction MyClass.0023FC60
Destructing MyClass.0023FC60
The address of x[0] is : 0023FC60

Anforderungen

Header: <new>

Namespace: std

Siehe auch

Referenz

new operator (STL Samples)

nothrow_t Structure

operator delete (<new>)