Quand est #include <nouveau> bibliothèque nécessaire en C++?

Selon cette entrée de référence de l'opérateur new
( http://www.cplusplus.com/reference/std/new/operator%20new/ ) :

Dynamique globale de stockage de l'opérateur
les fonctions spéciales sont dans la norme
bibliothèque:

  • Les trois versions du nouvel opérateur sont déclarés dans l'espace de noms global,
    pas dans l'espace de noms std.
  • La première et deuxième versions sont déclarées implicitement dans tous les
    l'unité de traduction d'un programme C++: La
    l'en-tête n'a pas besoin d'être
    inclus pour eux d'être présents.

Il me semble que cela implique que la troisième version de l'opérateur new (placement nouveau) n'est pas déclarée implicitement dans chaque unité de traduction d'un programme C++ et de l'en-tête <new> ne doivent être inclus pour elle d'être présent. Est-ce exact?

Si oui, comment est-ce que l'utilisation des deux g++ et MS VC++ Express compilateurs il semble que je peux compiler du code en utilisant la troisième version de la nouvelle, sans #include <new> dans mon code source?

Aussi, le MSDN Bibliothèque C++ Standard de référence d'entrée sur le panneau de nouvelle donne quelques exemples de code pour les trois formes de l'opérateur new qui contient le #include <new> déclaration, cependant l'exemple semble compiler et exécuter tout de même pour moi, sans que cela comprend?

//new_op_new.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;
   delete fPtr;

   //The second form of new delete
   char x[sizeof( MyClass )];
   MyClass* fPtr2 = new( &x[0] ) MyClass;
   fPtr2 -> ~MyClass();
   cout << "The address of x[0] is : " << ( void* )&x[0] << endl;

   //The third form of new delete
   MyClass* fPtr3 = new( nothrow ) MyClass;
   delete fPtr3;
}

Quelqu'un pourrait jeter quelque lumière sur ce et quand, et pourquoi, vous pourriez avoir besoin pour #include <new> - peut-être un exemple de code qui ne compile pas sans #include <new> ?

Grâce.

InformationsquelleAutor Paul Caheny | 2010-05-07