operator new (<new>)
La fonction d'allocation appelée par une nouvelle expression pour allouer de la mémoire pour un tableau d'objets.
void *operator new[](
std::size_t _Count
)
throw(std::bad_alloc);
void *operator new[](
std::size_t _Count,
const std::nothrow_t&
) throw( );
void *operator new[](
std::size_t _Count,
void* _Ptr
) throw( );
Paramètres
_Count
Le nombre d'octets de mémoire à allouer de l'objet table._Ptr
Le pointeur à retourner.
Valeur de retour
Un pointeur vers l'adresse ayant le moins d'octets de la mémoire nouvellement allouée.Ou _Ptr.
Notes
La première fonction est appelée par une expression d' new[] pour allouer des octets d' _Count de mémoire correctement alignés pour représenter tout objet tableau de cette taille ou le plus petit.Le programme peut définir une fonction avec cette signature de la fonction qui remplace la version par défaut définie par la bibliothèque C++ standard.Le comportement requis est le même que opérateur new(size_t).Le comportement par défaut consiste à retourner operator new(_Count).
La deuxième fonction est appelée par une expression d' new[] de positionnement pour allouer des octets d' _Count de mémoire correctement alignés pour représenter tout objet tableau de cette taille.Le programme peut définir une fonction avec cette signature de la fonction qui remplace la version par défaut définie par la bibliothèque C++ standard.Le comportement par défaut consiste à retourner operatornew(_Count) si cette fonction réussit.Sinon, il retourne un pointeur null.
La troisième fonction est appelée par une expression d' new[] de positionnement, du formulaire new (args) T[]N.Ici, les args se compose d'un pointeur d'objet unique.La fonction retourne _Ptr.
À l'espace de stockage libre alloué par operator new[], appelez operator delete [].
Pour plus d'informations sur le comportement est levée ou nonthrowing de nouveau, consultez Le nouveau les opérateurs et delete.
Exemple
// new_op_alloc.cpp
// compile with: /EHsc
#include <new>
#include <iostream>
using namespace std;
class MyClass {
public:
MyClass() {
cout << "Construction MyClass." << this << endl;
};
~MyClass() {
imember = 0; cout << "Destructing MyClass." << this << endl;
};
int imember;
};
int main() {
// The first form of new delete
MyClass* fPtr = new MyClass[2];
delete[ ] fPtr;
// The second form of new delete
char x[2 * sizeof( MyClass ) + sizeof(int)];
MyClass* fPtr2 = new( &x[0] ) MyClass[2];
fPtr2[1].~MyClass();
fPtr2[0].~MyClass();
cout << "The address of x[0] is : " << ( void* )&x[0] << endl;
// The third form of new delete
MyClass* fPtr3 = new( nothrow ) MyClass[2];
delete[ ] fPtr3;
}
Résultat de l'exemple
Construction MyClass.00311AEC
Construction MyClass.00311AF0
Destructing MyClass.00311AF0
Destructing MyClass.00311AEC
Construction MyClass.0012FED4
Construction MyClass.0012FED8
Destructing MyClass.0012FED8
Destructing MyClass.0012FED4
The address of x[0] is : 0012FED0
Construction MyClass.00311AEC
Construction MyClass.00311AF0
Destructing MyClass.00311AF0
Destructing MyClass.00311AEC
Configuration requise
en-tête : <new>
l'espace de noms : DST