Sdílet prostřednictvím


new – operátor (<new>)

Funkci nový výraz pro alokování paměti pro jednotlivé objekty.

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
    Počet bajtů úložiště, které mají být přiděleny.

  • _Ptr
    Ukazatele, které mají být vráceny.

Vrácená hodnota

Ukazatel na nejnižší adrese bajtů úložiště nově přiděleny.Nebo_Ptr.

Poznámky

První funkce je volána přidělit nový výraz _Count bajtů úložiště vhodně zarovnaný představovat libovolný objekt zadané velikosti.Program můžete definovat alternativní funkci podpisem této funkce, která nahradí výchozí verzi definován Standard C++ Library a tak je nahraditelný.

Požadované chování je vrátit ukazatel zadána pouze v případě, že úložiště lze rozdělit podle požadavku.Každé takové rozdělení výnosů z jiných přiděleného úložiště ukazatel do úložiště nesouvislý.Pořadí a contiguity úložiště přidělí následná volání není.Je počáteční hodnota uložená nespecifikované.Vrácený ukazatel odkazuje na začátek přiděleného úložiště (nejnižší bajt adresy).Pokud počet nula, hodnota vrácená neporovnává rovná jinou hodnotu vrácenou funkcí.

Výchozí chování je provádění smyčky.V rámci smyčky funkce nejprve pokusí přidělit požadované úložiště.Zda pokus zahrnuje volání malloc(size_t) není.Pokud je tento pokus úspěšný, vrátí funkce ukazatel do přidělené paměti.Jinak volání funkce označeny Nová obslužná rutina.Pokud volaná funkce vrátí, opakování.Pokud je úspěšný pokus přidělit požadované úložiště nebo pokud volaná funkce nevrátí, ukončí se cyklus.

Požadované chování nová obslužná rutina je provést jednu z následujících operací:

  • Proveďte další úložiště k dispozici pro přidělení a vraťte.

  • Call either abort or exit(int).

  • Vyvolat objekt typu bad_alloc.

Výchozí chování Nová obslužná rutina k vyvoláni objekt typu bad_alloc.Ukazatel s hodnotou null označuje výchozí novou obslužnou rutinu.

Pořadí a úložiště přidělí následná volání contiguity operator new(size_t) nezadané, jsou počáteční hodnoty, které jsou v ní uloženy.

Druhá funkce je volána umístění nový výraz přidělit _Count bajtů úložiště vhodně zarovnaný představovat libovolný objekt zadané velikosti.Program můžete definovat alternativní funkci podpisem této funkce, která nahradí výchozí verzi definován Standard C++ Library a tak je nahraditelný.

Výchozí chování je vrátit operator new(_Count) je-li tato funkce úspěšné.V opačném případě vrátí ukazatel s hodnotou null.

Třetí funkce je volána umístění nové výraz formuláře nové (args) T.Zde args se skládá z jednoho objektu ukazatel.To může být užitečné při vytváření objektu na známou adresu.Vrátí funkce _Ptr.

Uvolněte úložiště přidělené operator new, volání operátor delete.

Další informace o vyvolání nebo nonthrowing chování nové, viz nové a odstranění operátory.

Příklad

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

Příklad výstupu

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

Požadavky

Záhlaví:<nový>

Obor názvů: std

Viz také

Referenční dokumentace

new – operátor (ukázky STL)

nothrow_t – struktura

delete – operátor (<new>)