<new>
– funkce
get_new_handler
new_handler get_new_handler() noexcept;
Poznámky
Vrátí aktuální new_handler
hodnotu .
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 new
použí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