Nota
L'accés a aquesta pàgina requereix autorització. Pots provar d'iniciar sessió o canviar de directori.
L'accés a aquesta pàgina requereix autorització. Pots provar de canviar directoris.
funciones
get_new_handler
new_handler get_new_handler() noexcept;
Comentarios
Devuelve el objeto actual new_handler.
launder
template <class T>
constexpr T* launder(T* ptr) noexcept;
Parámetros
ptr
Dirección de un byte en la memoria que contiene un objeto cuyo tipo es similar a T.
Valor devuelto
Valor de tipo T* que apunta a X.
Comentarios
También se denomina como una barrera de optimización de puntero.
Se usa como una expresión constante cuando se puede usar el valor de su argumento en una expresión constante. Un byte de almacenamiento es accesible a través de un valor de puntero que apunta a un objeto si dentro del almacenamiento ocupado por otro objeto esta un objeto con un puntero similar.
Ejemplo
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
Proporciona un objeto que se usará como argumento para las versiones nothrow de new y delete.
extern const std::nothrow_t nothrow;
Comentarios
El objeto se usa como un argumento de función para que coincida con el tipo de parámetro std::nothrow_t.
Ejemplo
Consulte operator new y operator new[] para obtener ejemplos de cómo std::nothrow_t se usa como parámetro de función.
set_new_handler
Instala una función de usuario que se va a llamar cuando el nuevo operador no pueda asignar una memoria.
new_handler set_new_handler(new_handler Pnew) throw();
Parámetros
Pnew
El new_handler que se va a instalar.
Valor devuelto
0 en la primera llamada y el valor new_handler anterior en las llamadas posteriores.
Comentarios
La función almacena Pnew en un puntero del newcontrolador estático que mantiene y después devuelve el valor almacenado previamente en el puntero. El controlador new es usado por operator new.
Ejemplo
// 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