Wikipedia états:Est-ce que C++ 0x peut toujours allouer explicitement avec l'opérateur global new?
Un type peut être rendue impossible d'attribuer à l'opérateur new:
struct NonNewable { void *operator new(std::size_t) = delete; };
Un objet de ce type ne peut jamais être affecté comme un objet de la pile ou en tant que membre d'une autre type. Il ne peut pas être directement affecté au tas sans tricherie non-portable. (Étant donné que le placement nouveau est la seule façon d'appeler un constructeur sur la mémoire allouée par l'utilisateur et cette utilisation a été interdite comme ci-dessus, l'objet ne peut pas être correctement construit.)
Suppression opérateur nouvelle est similaire à la rendre privée dans C++ courant, mais n'utilise pas explicitement l'opérateur global new, ce qui évite la recherche spécifique à la classe, toujours valide C++ 0x?
NonNewable *p = ::new NonNewable();
// neither non-portable nor trickery, though perhaps not widely known
Ai-je manqué quelque chose dans le brouillon?
Pour être clair, ceci est valable 03 C++ et works fine:
struct NonNewable {
private:
void *operator new(std::size_t); // not defined
};
int main() {
// ignore the leaks, it's just an example
void *mem = operator new(sizeof(NonNewable));
NonNewable *p = ::new(mem) NonNewable();
p = ::new NonNewable();
return 0;
}
Si vous vérifiez: le texte cité a été supprimé de l'article Wikipedia. –