Freigeben über


operator new[] (<new>)

Die Zuordnungsfunktion aufgerufen über einen neuen Ausdruck, um Speicher für ein Objektarray zuzuordnen.

void *operator new[]( 
   std::size_t _Count 
) 
   throw(std::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 Anzahl der Bytes zum Arrayobjekt zugeordnet, Speicher.

  • _Ptr
    Der zurückgegeben werden Zeiger.

Rückgabewert

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

Hinweise

Die erste Funktion wird durch einen new[] Ausdruck aufgerufen, um _Count Bytes Speicherplatz zuzuordnen entsprechend ausgerichtet, um jedes Objekt dieser Größe darzustellen oder kleiner. Das Programm kann eine Funktion mit dieser Funktionssignatur definieren, die die Standardversion ersetzt, die von der C++-Standardbibliothek definiert wird. Das erforderliche Verhalten entspricht für Operator neu(size_t). Das Standardverhalten besteht darin, operator new(_Count) zurückgibt.

Die zweite Funktion wird durch einen Platzierungs new[] Ausdruck aufgerufen, um _Count Bytes Speicherplatz zuzuordnen entsprechend ausgerichtet, um jedes Objekt dieser Größe darzustellen. Das Programm kann eine Funktion mit dieser Funktionssignatur definieren, die die Standardversion ersetzt, die von der C++-Standardbibliothek definiert wird. Das Standardverhalten ist, Operator neu(_Count) zurückgibt wenn diese Funktion. Andernfalls gibt es einem NULL-Zeiger zurück.

Die dritte Funktion wird über einen Ausdruck, Platzierungs new[] des Formulars args( neu ) T[N] aufgerufen. Hier args besteht aus einem einzelnen Objektzeiger. Die Funktion gibt _Ptr zurück.

Wenn Speicher freien zugeordnet durch operator new[], rufen Sie Operator delete [].

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

Beispiel

// new_op_alloc.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[2];
   delete[ ] fPtr;

   // The second form of new delete
   char x[2 * sizeof( MyClass ) + sizeof(int)];
   
   MyClass* fPtr2 = new( &x[0] ) MyClass[2];
   fPtr2[1].~MyClass();
   fPtr2[0].~MyClass();
   cout << "The address of x[0] is : " << ( void* )&x[0] << endl;

   // The third form of new delete
   MyClass* fPtr3 = new( nothrow ) MyClass[2];
   delete[ ] fPtr3;
}

Beispielausgabe

Construction MyClass.00311AEC
Construction MyClass.00311AF0
Destructing MyClass.00311AF0
Destructing MyClass.00311AEC
Construction MyClass.0012FED4
Construction MyClass.0012FED8
Destructing MyClass.0012FED8
Destructing MyClass.0012FED4
The address of x[0] is : 0012FED0
Construction MyClass.00311AEC
Construction MyClass.00311AF0
Destructing MyClass.00311AF0
Destructing MyClass.00311AEC

Anforderungen

Header: <neu>

Namespace: std

Siehe auch

Referenz

nothrow_t-Struktur

operator delete[] (<new>)