new

De Appmethod Topics
Aller à : navigation, rechercher

Remonter à Liste alphabétique des mots clés - Index


Catégorie

Opérateurs, Mots clés spécifiques C++

Syntaxe

 void *operator new(std::size_t size) throw(std::bad_alloc);
 void *operator new(std::size_t size, const std::nothrow_t &) throw();
 void *operator new[](std::size_t size) throw(std::bad_alloc);
 void *operator new[](std::size_t size, const std::nothrow_t &) throw();
 void *operator new(std::size_t size, void *ptr) throw();    // Placement form
 void *operator new[](std::size_t size, void *ptr) throw();  // Placement form

Description

Les opérateurs new permettent une allocation dynamique de la mémoire, similaire mais plus puissant que la fonction standard malloc. Ces fonctions d'allocation essaient d'allouer taille octets de stockage. En cas de réussite, new renvoie un pointeur vers la mémoire allouée. En cas d'échec de l'allocation, l'opérateur new appelle la fonction new_handler. Par défaut, new_handler déclenche une exception de type bad_alloc. Si vous ne souhaitez pas qu'une exception soit déclenchée, utilisez la version nothrow de operator new. Les versions nothrow renvoient un résultat de pointeur NULL en cas d'échec, au lieu de déclencher une exception.

Les fiches de placement par défaut de operator new sont réservées et ne peuvent pas être redéfinies. Toutefois, vous pouvez surcharger la fiche de placement avec une signature différente (c'est-à-dire portant un nombre ou type différent d'arguments). Les fiches de placement par défaut acceptent un pointeur de type void, et ne font que renvoyer ce pointeur, inchangé. Cela peut être utile lorsque vous souhaitez allouer un objet à une adresse connue. L'utilisation de la fiche de placement de new peut être délicate car vous devez vous souvenir d'appeler explicitement le destructeur de votre objet puis de libérer le tampon mémoire préalloué. N'appelez pas l'opérateur delete sur un objet alloué avec l'opérateur de placement new.

Une requête d'allocation non tableau utilise la fonction appropriée operator new(). Toutes les demandes d'allocation tableau appellent la fonction operator new[]() appropriée. Pensez à utiliser la forme tableau de operator delete[]() lors de la désallocation d'un tableau créé avec operator new[]().

Remarque : Les tableaux de classes nécessitent la définition d'un constructeur par défaut dans la classe. Une demande d'allocation de 0 octet renvoie un pointeur non NULL. La répétition de demandes de ce type renvoie des pointeurs non NULL distincts.

Exemple de Operator new avec nothrow

 #include <new>
 int main(int argc, char* argv[])
 {
    int *pn;
       // nothrow version returns null pointer rather than throwing a
       // bad_alloc exception.
       pn = new(nothrow) int[5000000];
       if(pn != NULL) {
         // Allocation succeded.
       }
       return 0;
 }


Voir aussi