Udostępnij za pośrednictwem


operator new (<new>)

Funkcja alokacji wywoływana przez nowe wyrażenie przydzielić magazynu dla tablicę obiektów.

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( );

Parametry

  • _Count
    Liczba bajtów pamięci do alokacji dla obiektu array.

  • _Ptr
    Wskaźnik ma być zwrócony.

Wartość zwracana

Wskaźnik do najniższego adresu bajt nowo przydzielone składowania.Lub_Ptr.

Uwagi

Pierwsza funkcja jest wywoływana przez new[] wyrażenie przydzielić _Count bajtów pamięci odpowiednio wyrównany reprezentuje dowolny obiekt array o tym rozmiarze lub mniejszych.Program można zdefiniować funkcję podpisem tej funkcji, który zastępuje wersję domyślne zdefiniowane przez standardowa biblioteka języka C++.Wymagane zachowanie jest takie samo jak dla operator new(size_t).Zachowanie domyślne jest do zwrotu operator new(_Count).

Druga funkcja jest wywoływana przez miejsce docelowe new[] wyrażenie przydzielić _Count bajtów pamięci odpowiednio wyrównany do reprezentowania dowolnego obiektu array tej wielkości.Program można zdefiniować funkcję podpisem tej funkcji, który zastępuje wersję domyślne zdefiniowane przez standardowa biblioteka języka C++.Zachowanie domyślne jest do zwrotu operatorNowy(_Count), jeśli ta funkcja się powiedzie.W przeciwnym razie zwraca wskaźnik zerowy.

Trzeci funkcja jest wywoływana przez miejsce docelowe new[] wyrażenie formularza Nowy (args) tn.W tym miejscu args składa się z wskaźnik pojedynczy obiekt.Funkcja zwraca _Ptr.

Aby zwolnić magazynu przydzielony przez operator new[], wywołanie operator usuwać [.

Więcej na temat rzuca lub nonthrowing zachowanie nowych, zobacz nowych i usunąć Operatorzy.

Przykład

// 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;
}

Przykładowe dane wyjściowe

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

Wymagania

Nagłówek: <new>

Obszar nazw: std

Zobacz też

Informacje

nothrow_t Structure

operator delete[] (<new>)