Udostępnij za pośrednictwem


operator new (<new>)

Funkcja wywoływana przez nowe wyrażenie-przydzielić magazynu dla poszczególnych obiektów.

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

Parametry

  • _Count
    Liczba bajtów pamięci do przydzielenia.

  • _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 nowe wyrażenie przydzielić _Count bajtów pamięci odpowiednio wyrównany do reprezentowania dowolnego obiektu tego rozmiaru.Program można zdefiniować alternatywne funkcji podpisu funkcji zastępuje wersję domyślne zdefiniowane przez standardowa biblioteka języka C++ i tak jest wymienny.

Jest wymagane zachowanie zwraca wskaźnik niepustych tylko wtedy, gdy magazyn można przydzielić wymaganej.Każdy taki przydział plony wskaźnik do magazynu rozłącznych z zaalokowana pamięć.Zamówienia i kółkami przydzielonych przez kolejne wywołania jest nieokreślony.Początkowa wartość przechowywana jest nieokreślony.Zwrócony wskaźnik punkty do rozpoczęcia zaalokowana pamięć (najniższy adres bajt).Liczba jest równa zero, wartość zwracana porównuje równe żadnej wartości zwracane przez funkcję.

Zachowanie domyślne jest wykonywanie pętli.W pętli funkcja najpierw próbuje przydzielić żądanej magazynu.Czy próba wymaga wywołania malloc(size_t) jest nieokreślony.Jeśli próba zakończy się pomyślnie, funkcja zwraca wskaźnik do przydzielonego magazynu.W przeciwnym razie wyznaczone wywołuje funkcję obsługi nowych.Jeśli wywołana funkcja zwraca, powtarza pętli.Pętla kończy się powiedzie się Próba przydzielenia żądanej składowania lub wywoływana funkcja nie zwraca.

Jest wymagane zachowanie obsługa nowych wykonaj jedną z następujących czynności:

  • Udostępnić więcej miejsca dla przydziału, a następnie powrócić.

  • Call either abort or exit(int).

  • Rzut obiektu typu bad_alloc.

Domyślne zachowanie obsługi nowych jest throw obiektu typu bad_alloc.Wskaźnik null wyznacza obsługi nowego domyślnego.

Zamówienia i kółkami przydzielonych przez kolejne wywołania operator new(size_t) jest nieokreślony, jak wartości początkowe tam przechowywane.

Druga funkcja jest wywoływana przez położenie nowego wyrażenia przydzielić _Count bajtów pamięci odpowiednio wyrównany do reprezentowania dowolnego obiektu tego rozmiaru.Program można zdefiniować alternatywne funkcji podpisu funkcji zastępuje wersję domyślne zdefiniowane przez standardowa biblioteka języka C++ i tak jest wymienny.

Zachowanie domyślne jest do zwrotu operator new(_Count), jeśli ta funkcja się powiedzie.W przeciwnym razie zwraca wskaźnik zerowy.

Trzeci funkcja jest wywoływana przez miejsce docelowe Nowy wyrażenie formularza Nowy (args) T.W tym miejscu args składa się z wskaźnik pojedynczy obiekt.Może to być przydatne przy konstruowaniu obiektu na znany adres.Funkcja zwraca _Ptr.

Aby zwolnić przydzielone przez magazyn operator new, call usunąć operator.

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

Przykład

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

Przykład danych wyjściowych.

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

Wymagania

Nagłówek: <new>

Obszar nazw: std

Zobacz też

Informacje

new operator (STL Samples)

nothrow_t Structure

operator delete (<new>)