operator new (<new>)

Funkcja wywoływana przez nowe wyrażenie przydzielić pamięci masowej 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, który ma być zwrócony.

Wartość zwracana

Wskaźnik do najniższego bajtowy adres magazynu nowo przydzielone.Lub_Ptr.

Uwagi

Pierwsza funkcja jest wywoływana przez nowe wyrażenie przydzielić _Count bajtów magazyn odpowiednio dostosowane do reprezentowania dowolnego obiektu tej wielkości.Program można zdefiniować alternatywne funkcja podpisem tej funkcji, który zastępuje wersję domyślną definicją standardowa biblioteka języka C++ i tak jest wymienny.

Zwraca wskaźnik niepustych tylko wtedy, gdy magazyn można przydzielić zgodnie z żądaniem jest wymagane zachowanie.Każdy taki przydział daje wskaźnik do magazynu rozłącznych od przydzielonych składowanie.Zamówienia i sąsiedztwo nośnikach przydzielonych przez kolejne wywołania jest nieokreślony.Początkowa wartość przechowywana jest nieokreślony.Zwrócony wskaźnik wskazuje na początku (najniższy bajtowy adres) przydzielonych składowanie.Jeśli liczba wynosi zero, wartość zwracana nie porównuje równa inna wartość zwracaną przez funkcję.

Zachowaniem domyślnym jest wykonanie pętli.Kod zawiera pętlę funkcja najpierw próbuje przydzielić żądanej pamięci masowej.Czy próba polega na wywołaniu malloc(size_t) jest nieokreślony.Jeśli próba zakończy się pomyślnie, funkcja zwraca wskaźnik do przydzielonego pamięci masowej.W przeciwnym wypadku funkcja wywołuje desygnowanym Nowy program obsługi.Jeśli wywoływana funkcja zwraca, powtórzeniu pętli.Pętla zostaje zakończona, gdy powiedzie się Próba przydzielenia żądanej pamięci masowej lub gdy wywołana funkcja nie zwraca.

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

  • Udostępnić więcej pamięci do alokacji, a następnie powrócić.

  • Call either abort or exit(int).

  • Rzut obiektu typu bad_alloc.

Domyślne zachowanie Nowy program obsługi jest rzucić obiektu typu bad_alloc.Wskaźnik zerowy wyznacza nowy program obsługi domyślnego.

Zamówienia i sąsiedztwo nośnikach przydzielonych przez kolejne wywołania operator new(size_t) jest nieokreślony, jak są wartościami początkowymi tam przechowywane.

Druga funkcja jest wywoływana przez umieszczenie nowego wyrażenia przydzielić _Count bajtów magazyn odpowiednio dostosowane do reprezentowania dowolnego obiektu tej wielkości.Program można zdefiniować alternatywne funkcja podpisem tej funkcji, który zastępuje wersję domyślną definicją standardowa biblioteka języka C++ i tak jest wymienny.

Domyślne zachowanie polega na powrót operator new(_Count) Jeśli ta funkcja się powiedzie.W przeciwnym wypadku zwraca pusty wskaźnik.

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

Aby zwolnić pamięć zaalokowana przez operator new, call usunąć operatora.

Aby uzyskać informacje o zgłaszaniu lub nonthrowing zachowanie nowych, zobacz Nowe 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:<nowy>

Przestrzeń nazw: std

Zobacz też

Informacje

new operator (STL — Przykłady)

nothrow_t — Struktura

operator delete (<new>)