Sdílet prostřednictvím


<new> – funkce

get_new_handler

new_handler get_new_handler() noexcept;

Poznámky

Vrátí aktuální new_handlerhodnotu .

prát

template <class T>
    constexpr T* launder(T* ptr) noexcept;

Parametry

ptr
Adresa bajtu v paměti, která obsahuje objekt, jehož typ je podobný T.

Návratová hodnota

Hodnota typu T* , která odkazuje na X.

Poznámky

Označuje se také jako bariéra optimalizace ukazatele.

Používá se jako konstantní výraz, pokud se hodnota argumentu může použít ve výrazu konstanty. Bajt úložiště je dostupný prostřednictvím hodnoty ukazatele, která odkazuje na objekt, pokud je v úložišti obsazeném jiným objektem, objekt s podobným ukazatelem.

Příklad

struct X { const int n; };

X *p = new X{3};
const int a = p->n;
new (p) X{5}; // p does not point to new object because X::n is const
const int b = p->n; // undefined behavior
const int c = std::launder(p)->n; // OK

nothrow

Poskytuje objekt, který se má použít jako argument pro nothrow verze new a delete.

extern const std::nothrow_t nothrow;

Poznámky

Objekt se používá jako argument funkce, který odpovídá typu parametru std::nothrow_t.

Příklad

Podívejte operator new se na příklady std::nothrow_t použití jako parametr funkce a operator new[] příklady použití.

set_new_handler

Nainstaluje uživatelskou funkci, která se má volat, když operátor při pokusu o přidělení paměti selže.

new_handler set_new_handler(new_handler Pnew) throw();

Parametry

Pnew
Instalace new_handler .

Návratová hodnota

0 při prvním volání a předchozí new_handler při následných voláních.

Poznámky

Funkce se uloží Pnew do ukazatele statické new obslužné rutiny , který udržuje, a vrátí hodnotu dříve uloženou v ukazateli. Obslužnou rutinu new operator newpoužívá .

Příklad

// new_set_new_handler.cpp
// compile with: /EHsc
#include <new>
#include <iostream>

using namespace std;
void __cdecl newhandler( )
{
   cout << "The new_handler is called:" << endl;
   throw bad_alloc( );
   return;
}

int main( )
{
   set_new_handler (newhandler);
   try
   {
      while ( 1 )
      {
         new int[5000000];
         cout << "Allocating 5000000 ints." << endl;
      }
   }
   catch ( exception e )
   {
      cout << e.what( ) << endl;
   }
}
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
Allocating 5000000 ints.
The new_handler is called:
bad allocation