<new>
operatori ed enumerazioni
enum align_val_t
enum class align_val_t : size_t {};
operator delete
Funzione chiamata da un'espressione delete
per deallocare l'archiviazione per singoli oggetti.
void operator delete(void* ptr) noexcept;
void operator delete(void *, void*) noexcept;
void operator delete(void* ptr, const std::nothrow_t&) noexcept;
Parametri
ptr
Puntatore il cui valore deve essere reso non valido dall'eliminazione.
Osservazioni:
La prima funzione viene chiamata da un'espressione delete
per eseguire il rendering del valore non ptr
valido. Il programma può definire una funzione con questa firma che sostituisce la versione predefinita della libreria standard C++. Il comportamento richiesto consiste nell'accettare un valore di ptr
che è nullptr
o che è stato restituito da una chiamata precedente a operator new
.
Il comportamento predefinito di un nullptr
valore in consiste nell'eseguire ptr
alcuna operazione. Qualsiasi altro valore di ptr
deve essere un valore restituito in precedenza da una new
chiamata come descritto in precedenza. Il comportamento predefinito per un valore non Null di ptr
consiste nel recuperare l'archiviazione allocata dalla chiamata precedente. Non è specificato in quali condizioni parte o in tutte queste risorse di archiviazione recuperate viene allocata da una chiamata successiva a operator new
o a una delle calloc
funzioni , malloc
o realloc
.
La seconda funzione viene chiamata da un'espressione di posizionamento delete
corrispondente a un'espressione new
del formato new( std::size_t )
. Non esegue alcuna operazione.
La terza funzione viene chiamata da un'espressione di posizionamento delete
corrispondente a un'espressione new
del formato new( std::size_t, const std::nothrow_t& )
. Il programma può definire una funzione con questa firma che sostituisce la versione predefinita della libreria standard C++. Il comportamento richiesto consiste nell'accettare un valore di ptr
ovvero nullptr
o restituito da una chiamata precedente a operator new
. Il comportamento predefinito consiste nel valutare delete( ptr )
.
Esempio
Vedere operator new
per un esempio che usa operator delete
.
operator delete[]
Funzione chiamata da un'espressione delete
per deallocare l'archiviazione per una matrice di oggetti.
void operator delete[](void* ptr) noexcept;
void operator delete[](void *, void*) noexcept;
void operator delete[](void* ptr, const std::nothrow_t&) noexcept;
Parametri
ptr
Puntatore il cui valore deve essere reso non valido dall'eliminazione.
Osservazioni:
La prima funzione viene chiamata da un'espressione delete[]
per rendere non valido il valore di ptr
. La funzione è sostituibile perché il programma può definire una funzione con questa firma che sostituisce la versione predefinita della libreria standard C++. Il comportamento richiesto consiste nell'accettare un valore di ptr
ovvero nullptr
o restituito da una chiamata precedente a operator new[]
. Il comportamento predefinito per un valore Null di ptr
non prevede l'esecuzione di alcuna operazione. Qualsiasi altro valore di ptr
deve essere un valore restituito da una precedente chiamata, come descritto in precedenza. Il comportamento predefinito per un valore non Null di ptr
questo tipo consiste nel recuperare lo spazio di archiviazione allocato dalla chiamata precedente. Non è specificato in quali condizioni parte o in tutte queste risorse di archiviazione recuperate viene allocata da una chiamata successiva a operator new
o a una delle calloc
funzioni , malloc
o realloc
.
La seconda funzione viene chiamata da un'espressione di posizionamento delete[]
corrispondente a un'espressione new[]
del formato new[]( std::size_t )
. Non esegue alcuna operazione.
La terza funzione viene chiamata da un'espressione di posizionamento delete[]
corrispondente a un'espressione new[]
del formato new[]( std::size_t, const std::nothrow_t& )
. Il programma può definire una funzione con questa firma che sostituisce la versione predefinita della libreria standard C++. Il comportamento richiesto consiste nell'accettare un valore di ptr
ovvero nullptr
o restituito da una chiamata precedente all'operatore new[]
. Il comportamento predefinito consiste nel valutare delete[]( ptr )
.
Esempio
Vedere operator new[]
per esempi dell'uso di operator delete[]
.
operator new
Funzione chiamata da un'espressione new per allocare memoria per singoli oggetti.
void* operator new(std::size_t count);
void* operator new(std::size_t count, const std::nothrow_t&) noexcept;
void* operator new(std::size_t count, void* ptr) noexcept;
Parametri
count
Numero di byte di memoria da allocare.
ptr
Puntatore da restituire.
Valore restituito
Puntatore all'indirizzo di byte più basso della risorsa di archiviazione appena allocata. Oppure ptr
, se si usa la terza forma della funzione.
Osservazioni:
La prima funzione viene chiamata da un'espressione new
per allocare count
byte di archiviazione allineati in modo adeguato per rappresentare qualsiasi oggetto di tale dimensione. Questa funzione è sostituibile. Significa che il programma può definire una funzione alternativa con questa firma di funzione che sostituisce la versione predefinita definita dalla libreria standard C++.
Il comportamento richiesto consiste nel restituire un puntatore non Null solo se l'archiviazione può essere allocata come richiesto. Ogni allocazione di questo tipo genera un puntatore alla memoria indipendente da qualsiasi altra allocazione di memoria. L'ordine e la contiguità della memoria allocata dalle chiamate successive non sono specificati. Il valore memorizzato iniziale non è specificato. Il puntatore restituito punta all'inizio (l'indirizzo di byte più basso) della risorsa di archiviazione allocata. Se count
è zero, il valore restituito non viene confrontato con qualsiasi altro valore restituito dalla funzione.
Il comportamento predefinito consiste nell'eseguire un ciclo. Nell'ambito del ciclo, la funzione prova innanzitutto ad allocare la memoria richiesta. Indica se il tentativo prevede una chiamata a malloc
non è specificato. Se il tentativo di allocazione ha esito positivo, la funzione restituisce un puntatore all'archiviazione allocata. In caso contrario, la funzione chiama la funzione designata di tipo new_handler
. Se la funzione chiamata restituisce un risultato, il ciclo viene ripetuto. Il ciclo termina quando un tentativo di allocare l'archiviazione richiesta ha esito positivo o quando una funzione chiamata non restituisce.
Il comportamento richiesto di una funzione di tipo new_handler
consiste nell'eseguire una delle operazioni seguenti:
Rendere disponibile altra memoria per l'allocazione e quindi restituire un risultato.
abort
Chiamare oexit
.Generare un oggetto di tipo
bad_alloc
.
Il comportamento predefinito di una new_handler
funzione consiste nel generare un oggetto di tipo bad_alloc
. Un nullptr
valore definisce la funzione predefinita new_handler
.
L'ordine e la contiguità dello spazio di archiviazione allocato da chiamate successive a operator new
non sono specificati, come sono i valori iniziali archiviati in tale posizione.
Per liberare spazio di archiviazione allocato dalla prima forma di operator new
, chiamare operator delete
.
La seconda funzione viene chiamata da un'espressione di posizionamento new
per allocare count
byte di archiviazione allineati in modo adeguato per rappresentare qualsiasi oggetto di tale dimensione. Questa funzione è sostituibile. Significa che il programma può definire una funzione alternativa con questa firma di funzione che sostituisce la versione predefinita definita dalla libreria standard C++.
Il comportamento predefinito consiste nel restituire operator new( count )
se la funzione ha esito positivo. In caso contrario, viene restituito nullptr
.
Per liberare spazio di archiviazione allocato dalla seconda forma di operator new
, ovvero se non ha restituito nullptr
, chiamare operator delete
.
La terza funzione viene chiamata da un'espressione di posizionamento new
non allocata, del formato new ( ptr ) T
. In questo caso, ptr
è costituito da un singolo puntatore a un oggetto. Può essere utile per costruire un oggetto in un indirizzo noto. La funzione restituisce ptr
. È necessario chiamare il distruttore in modo esplicito su questo oggetto.
Se si chiama il posizionamento new
non allocato, non chiamare delete
. Chiamare invece l'dealloatore per la memoria specificata, se necessario, dopo aver chiamato il distruttore per l'oggetto.
Per informazioni su come generare o non generare un comportamento di new
, vedere Operatori new
e delete
.
Esempio
// new_op_new.cpp
// compile with: /EHsc
#include<new>
#include<iostream>
using namespace std;
class MyClass {
int member{ 0 };
public:
MyClass() {
cout << "MyClass at 0x" << this << " constructed.\n";
};
~MyClass() {
cout << "MyClass at 0x" << this << " destroyed.\n";
};
};
int main( )
{
// The first form of new / delete
MyClass* fPtr1 = new MyClass;
delete fPtr1;
// The second form (fail returns nullptr) of new / delete
MyClass* fPtr2 = new(nothrow) MyClass[2];
if (fPtr2)
delete fPtr2;
// The third form (non-allocating placement) of new / delete
char x[sizeof(MyClass)]; // x is automatic
MyClass* fPtr3 = new(&x[0]) MyClass;
fPtr3->~MyClass(); // Requires explicit destructor call
// no delete because x is on the stack
}
operator new[]
Funzione di allocazione chiamata da un'espressione new per allocare memoria per una matrice di oggetti.
void* operator new[](std::size_t count);
void* operator new[](std::size_t count, const std::nothrow_t&) noexcept;
void* operator new[](std::size_t count, void* ptr) noexcept;
Parametri
count
Numero di byte di memoria da allocare per l'oggetto matrice.
ptr
Puntatore da restituire.
Valore restituito
Puntatore all'indirizzo di byte più basso della risorsa di archiviazione appena allocata. In alternativa ptr
, quando viene utilizzata la terza maschera.
Osservazioni:
La prima funzione viene chiamata da un'espressione new[]
per allocare count
byte di memoria allineati correttamente in modo da rappresentare qualsiasi oggetto matrice di dimensione uguale o minore. Il programma può definire una funzione con questa firma che sostituisce la versione predefinita della libreria standard C++. Il comportamento richiesto è uguale a per operator new
. Il comportamento predefinito consiste nel restituire operator new( count )
se ha esito positivo. In caso contrario, genera un'eccezione std::bad_alloc
(o un'eccezione derivata da std::bad_alloc
). Per liberare spazio di archiviazione allocato da questo formato di operator new[]
, chiamare operator delete[]
.
La seconda funzione viene chiamata da un'espressione new[]
di posizionamento per allocare count
byte di memoria allineati correttamente in modo da rappresentare qualsiasi oggetto matrice di tale dimensione. Il programma può definire una funzione con questa firma che sostituisce la versione predefinita della libreria standard C++. Il comportamento predefinito consiste nel restituire operator new( count )
se la funzione ha esito positivo. In caso contrario, viene restituito nullptr
. Per liberare spazio di archiviazione allocato da questo formato di operator new[]
, chiamare operator delete[]
. Per altre informazioni sul comportamento di throwing o non throwing di new
, vedere Operatori new
e delete
.
La terza funzione viene chiamata da un'espressione di posizionamento new[]
non allocata, del formato new( ptr ) T[ N ]
. Questo modulo non alloca memoria. Costruisce gli oggetti nella memoria passati tramite il ptr
parametro . La funzione restituisce ptr
. È necessario chiamare il distruttore in modo esplicito per ogni oggetto creato. L'utente è responsabile della fornitura di memoria sufficiente per ptr
. Non richiamare delete[]
sul valore restituito dall'espressione new
. Al contrario, deallocare ptr
, se necessario, dopo aver chiamato i distruttori.
Esempio
// new_op_array.cpp
// compile with: /EHsc
#include <new>
#include <iostream>
using namespace std;
class MyClass {
int member{ 0 };
public:
MyClass() {
cout << "MyClass at 0x" << this << " constructed.\n";
};
~MyClass() {
cout << "MyClass at 0x" << this << " destroyed.\n";
};
};
int main() {
// The first form of array new / delete
MyClass* fPtr1 = new MyClass[2];
delete[] fPtr1;
// The second form (fail returns nullptr) of array new / delete
MyClass* fPtr2 = new(nothrow) MyClass[2];
if (fPtr2)
delete[] fPtr2;
// The third form (non-allocating placement) of array new / delete
char x[2 * sizeof(MyClass) + sizeof(int)]; // x is automatic
MyClass* fPtr3 = new(&x[0]) MyClass[2];
fPtr3[1].~MyClass(); // Requires explicit destructor calls
fPtr3[0].~MyClass(); // Recommended in reverse construction order
// Don't delete[] fPtr3 here.
// delete[] &x[0] not required because x is on the stack
}