<new>
opérateurs et énumérations
enum align_val_t
enum class align_val_t : size_t {};
operator delete
Fonction appelée par une delete
expression pour libérer le stockage des objets individuels.
void operator delete(void* ptr) noexcept;
void operator delete(void *, void*) noexcept;
void operator delete(void* ptr, const std::nothrow_t&) noexcept;
Paramètres
ptr
Pointeur dont la valeur doit être rendue non valide par la suppression.
Notes
La première fonction est appelée par une delete
expression pour afficher la valeur de ptr
non valide. Le programme peut définir une fonction avec cette signature de fonction qui remplace la version par défaut définie par la bibliothèque standard C++. Le comportement requis consiste à accepter une valeur de ptr
ce qui est nullptr
ou qui a été retournée par un appel antérieur à operator new
.
Le comportement par défaut d’une nullptr
valeur dans ptr
est de ne rien faire. Toute autre valeur de ptr
doit être une valeur retournée précédemment par un new
appel, comme décrit précédemment. Le comportement par défaut d’une valeur non Null consiste ptr
à récupérer le stockage alloué par l’appel précédent. Il n’est pas spécifié dans quelles conditions le stockage récupéré ou dans toutes ces conditions est alloué par un appel ultérieur à , ou à operator new
l’une des fonctions , malloc
ou realloc
à l’une calloc
des fonctions.
La deuxième fonction est appelée par une expression de placement delete
correspondant à une new
expression du formulaire new( std::size_t )
. Elle ne fait rien.
La troisième fonction est appelée par une expression de placement delete
correspondant à une new
expression du formulaire new( std::size_t, const std::nothrow_t& )
. Le programme peut définir une fonction avec cette signature de fonction qui remplace la version par défaut définie par la bibliothèque standard C++. Le comportement requis consiste à accepter une valeur de ptr
celle-ci nullptr
ou qui a été retournée par un appel antérieur à operator new
. Le comportement par défaut est d’évaluer delete( ptr )
.
Exemple
Consultez operator new
un exemple qui utilise operator delete
.
operator delete[]
Fonction appelée par une delete
expression pour libérer le stockage pour un tableau d’objets.
void operator delete[](void* ptr) noexcept;
void operator delete[](void *, void*) noexcept;
void operator delete[](void* ptr, const std::nothrow_t&) noexcept;
Paramètres
ptr
Pointeur dont la valeur doit être rendue non valide par la suppression.
Notes
La première fonction est appelée par une expression delete[]
pour rendre la valeur de ptr
non valide. La fonction est remplaçable, car le programme peut définir une fonction avec cette signature de fonction qui remplace la version par défaut définie par la bibliothèque standard C++. Le comportement requis consiste à accepter une valeur de ptr
celle-ci nullptr
ou qui a été retournée par un appel antérieur à operator new[]
. Le comportement par défaut pour une valeur Null de ptr
consiste à ne rien faire. Toute autre valeur de ptr
doit être une valeur retournée plus tôt par un appel comme décrit précédemment. Le comportement par défaut de cette valeur ptr
non null consiste à récupérer le stockage alloué par l’appel précédent. Il n’est pas spécifié dans quelles conditions le stockage récupéré ou dans toutes ces conditions est alloué par un appel ultérieur à , ou à operator new
l’une des fonctions , malloc
ou realloc
à l’une calloc
des fonctions.
La deuxième fonction est appelée par une expression de placement delete[]
correspondant à une new[]
expression du formulaire new[]( std::size_t )
. Elle ne fait rien.
La troisième fonction est appelée par une expression de placement delete[]
correspondant à une new[]
expression du formulaire new[]( std::size_t, const std::nothrow_t& )
. Le programme peut définir une fonction avec cette signature de fonction qui remplace la version par défaut définie par la bibliothèque standard C++. Le comportement requis consiste à accepter une valeur de ptr
celle-ci nullptr
ou qui a été retournée par un appel antérieur à l’opérateur new[]
. Le comportement par défaut est d’évaluer delete[]( ptr )
.
Exemple
Pour operator new[]
obtenir des exemples d’utilisation de operator delete[]
.
operator new
Fonction appelée par une expression new pour allouer le stockage pour des objets distincts.
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;
Paramètres
count
Nombre d’octets de stockage à allouer.
ptr
Pointeur à retourner.
Valeur retournée
Pointeur vers l’adresse d’octet la plus basse du stockage nouvellement alloué. Ou ptr
, si vous utilisez la troisième forme de la fonction.
Notes
La première fonction est appelée par une new
expression pour allouer des count
octets de stockage correctement alignés pour représenter n’importe quel objet de cette taille. Cette fonction est remplaçable. Cela signifie que le programme peut définir une autre fonction avec cette signature de fonction qui remplace la version par défaut définie par la bibliothèque standard C++.
Le comportement requis consiste à retourner un pointeur non Null uniquement si le stockage peut être alloué comme demandé. Chaque allocation génère un pointeur vers du stockage disjoint de tout autre stockage alloué. L’ordre et la contiguïté du stockage alloué par les appels successifs ne sont pas spécifiés. La valeur stockée initiale n’est pas spécifiée. Le pointeur retourné pointe vers le début (l’adresse d’octet la plus basse) du stockage alloué. Si count
elle est égale à zéro, la valeur retournée ne correspond à aucune autre valeur retournée par la fonction.
Le comportement par défaut consiste à exécuter une boucle. Dans la boucle, la fonction tente d’abord d’allouer le stockage demandé. Indique si la tentative implique un appel à n’est malloc
pas spécifié. Si la tentative d’allocation réussit, la fonction retourne un pointeur vers le stockage alloué. Sinon, la fonction appelle la fonction désignée de type new_handler
. Si la fonction appelée retourne, la boucle se répète. La boucle se termine lorsqu’une tentative d’allocation du stockage demandé réussit ou lorsqu’une fonction appelée ne retourne pas.
Le comportement requis d’une fonction de type new_handler
consiste à effectuer l’une des opérations suivantes :
Rendre plus de stockage disponible pour l’allocation, puis retourner.
Appelez l’une ou l’autre
abort
ouexit
.Lève un objet de type
bad_alloc
.
Le comportement par défaut d’une new_handler
fonction consiste à lever un objet de type bad_alloc
. Une nullptr
valeur désigne la fonction par défaut new_handler
.
L’ordre et la contiguïté du stockage alloués par les appels successifs à ne operator new
sont pas spécifiés, comme les valeurs initiales stockées ici.
Pour libérer le stockage alloué par la première forme de operator new
, appelez operator delete
.
La deuxième fonction est appelée par une expression de placement new
pour allouer des count
octets de stockage correctement alignés pour représenter n’importe quel objet de cette taille. Cette fonction est remplaçable. Cela signifie que le programme peut définir une autre fonction avec cette signature de fonction qui remplace la version par défaut définie par la bibliothèque standard C++.
Le comportement par défaut consiste à retourner operator new( count )
si cette fonction réussit. Sinon, nullptr
est retourné.
Pour libérer le stockage alloué par la deuxième forme de operator new
(autrement dit, s’il n’a pas retourné nullptr
), appelez operator delete
.
La troisième fonction est appelée par une expression de placement new
non alloué, de la forme new ( ptr ) T
. Ici, ptr
se compose d’un pointeur d’objet unique. Il peut être utile de construire un objet à une adresse connue. La fonction retourne ptr
. Vous devez appeler explicitement le destructeur sur cet objet.
Si vous appelez un placement new
sans allocation, n’appelez delete
pas . Au lieu de cela, appelez le deallocator pour la mémoire que vous avez fournie, si nécessaire, après avoir appelé le destructeur pour l’objet.
Pour plus d’informations sur le comportement de levée ou de non-levée, new
consultez Les opérateurs et delete
les new
opérateurs.
Exemple
// 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[]
Fonction d’allocation appelée par une expression new pour allouer le stockage pour un tableau d’objets.
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;
Paramètres
count
Nombre d’octets de stockage à allouer pour l’objet tableau.
ptr
Pointeur à retourner.
Valeur retournée
Pointeur vers l’adresse d’octet la plus basse du stockage nouvellement alloué. Ou ptr
, lorsque le troisième formulaire est utilisé.
Notes
La première fonction est appelée par une expression new[]
pour allouer count
octets de stockage alignés correctement pour représenter tout objet de tableau de cette taille ou plus petit. Le programme peut définir une fonction avec cette signature de fonction qui remplace la version par défaut définie par la bibliothèque standard C++. Le comportement requis est le même que pour operator new
. Le comportement par défaut consiste à retourner operator new( count )
s’il réussit. Sinon, elle lève une std::bad_alloc
exception (ou une exception dérivée de std::bad_alloc
). Pour libérer le stockage alloué par cette forme de operator new[]
, appelez operator delete[]
.
La deuxième fonction est appelée par une expression new[]
de positionnement pour allouer count
octets de stockage alignés correctement pour représenter tout objet de tableau de cette taille. Le programme peut définir une fonction avec cette signature de fonction qui remplace la version par défaut définie par la bibliothèque standard C++. Le comportement par défaut consiste à retourner operator new( count )
si cette fonction réussit. Sinon, nullptr
est retourné. Pour libérer le stockage alloué par cette forme de operator new[]
, appelez operator delete[]
. Pour plus d’informations sur le comportement de levée ou de non-levée, new
consultez The new
and delete
operators.
La troisième fonction est appelée par une expression de placement new[]
non alloué, de la forme new( ptr ) T[ N ]
. Ce formulaire n’alloue pas de mémoire. Il construit les objets dans la mémoire passée par le ptr
paramètre. La fonction retourne ptr
. Vous devez appeler explicitement le destructeur pour chaque objet créé. Vous êtes responsable de la fourniture d’une mémoire suffisante pour ptr
. N’appelez delete[]
pas sur la valeur retournée par l’expression new
. Au lieu de cela, libérez ptr
, si nécessaire, après avoir appelé les destructeurs.
Exemple
// 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
}