new operator (STL Samples)
illustre comment utiliser operator new in <new>.
void *operator new(
size_t n
)
void *operator new(
size_t n,
const nothrow&
)
void *operator new[](
size_t n
);
Notes
[!REMARQUE]
Les noms de classes/paramètre dans le prototype ne correspondent pas à la version du fichier d'en-tête.certains ont été modifiés pour améliorer la lisibilité.
Le premier opérateur de nouveau tentera d'allouer de la mémoire et si elle échoue, lèvera une exception.L'opérateur de nouveau deuxième reçoit un deuxième paramètre de declspec (nothrow) de type.Ce paramètre indique que si l'allocation échoue, il doit retourner NULL et ne pas lever d'exception.Opérateur de nouveau le troisième allouera la mémoire pour un tableau de ce type et s'il échoue, lève une exception.
Exemple
// newop.cpp
// compile with: /EHsc
//
// Functions:
// void *operator new(size_t n)
// void *operator new(size_t n, const nothrow&)
// void *operator new[](size_t n);
#include <new>
#include <iostream>
using namespace std;
class BigClass {
public:
BigClass() {};
~BigClass(){}
#ifdef _WIN64
double BigArray[0x0fffffff];
#else
double BigArray[0x0fffffff];
#endif
};
int main() {
try {
BigClass * p = new BigClass;
}
catch( bad_alloc a) {
const char * temp = a.what();
cout << temp << endl;
cout << "Threw a bad_alloc exception" << endl;
}
BigClass * q = new(nothrow) BigClass;
if ( q == NULL )
cout << "Returned a NULL pointer" << endl;
try {
BigClass * r[3] = {new BigClass, new BigClass, new BigClass};
}
catch( bad_alloc a) {
const char * temp = a.what();
cout << temp << endl;
cout << "Threw a bad_alloc exception" << endl;
}
}
Résultat de l'exemple
bad allocation
Threw a bad_alloc exception
Returned a NULL pointer
bad allocation
Threw a bad_alloc exception
Configuration requise
en-tête : <new>