Nouvelle bibliothèque C ++ - opérateur nouveau

La description

Il alloue des octets de taille de stockage, correctement alignés pour représenter tout objet de cette taille, et renvoie un pointeur non nul sur le premier octet de ce bloc.

Déclaration

Voici la déclaration pour l'opérateur new.

void* operator new (std::size_t size) throw (std::bad_alloc);       (throwing allocation)
void* operator new (std::size_t size, const std::nothrow_t& nothrow_value) throw();                (nothrow allocation)
void* operator new (std::size_t size, void* ptr) throw();                       (placement)

Paramètres

  • size - Il contient la taille en octets du bloc de mémoire demandé.

  • nothrow_value - Il contient le jet constant.

  • ptr - C'est un pointeur vers un bloc de mémoire déjà alloué de la taille appropriée.

Valeur de retour

Il renvoie un pointeur vers l'espace de stockage nouvellement alloué.

Des exceptions

S'il ne parvient pas à allouer le stockage, il lève bad_alloc.

Courses de données

Il modifie le stockage référencé par la valeur retournée.

Exemple

Dans l'exemple ci-dessous, explique le nouvel opérateur.

#include <iostream>
#include <new>

struct MyClass {
   int data[100];
   MyClass() {std::cout << "It constructed [" << this << "]\n";}
};

int main () {

   std::cout << "1: ";
   MyClass * p1 = new MyClass;

   std::cout << "2: ";
   MyClass * p2 = new (std::nothrow) MyClass;

   std::cout << "3: ";
   new (p2) MyClass;

   std::cout << "4: ";
   MyClass * p3 = (MyClass*) ::operator new (sizeof(MyClass));

   delete p1;
   delete p2;
   delete p3;

   return 0;
}

Compilons et exécutons le programme ci-dessus, cela produira le résultat suivant -

1: It constructed [0x21f9ba0]
2: It constructed [0x21f9d40]
3: It constructed [0x21f9d40]