2009-02-25 5 views
5

dans un exemple j'ai vu cette lignenouveau 2ème param, C++

Thing *pThing = new (getHeap(), getConstraint()) Thing(initval()); 

Il n'y avait pas d'explication, la définition du corps de la fonction ou de classe. Que signifie le second paramètre?

+0

Etes-vous sûr de l'avoir correctement saisi? Il ne semble pas y avoir de variable pour accepter le résultat de nouveau. –

+0

Je pense que c'était censé être "Chose * pThing = new (getHeap(), getConstraint()) Chose (initval());". C'est de # 14 en C++ gotchas – CTT

+0

Merci, CTT. Maintenant, cela a du sens. –

Répondre

19

C'est une instance de la syntaxe 'placement new'. C'est pour passer des paramètres supplémentaires à une fonction d'allocation de mémoire personnalisée.

Alors que ceci:

Obj* pObj = new Obj; 

correspond à l'allocation nouvelle mémoire en appelant operator new avec un seul paramètre de type size_t et la valeur de sizeof(Obj), et la construction d'une nouvelle instance Obj dans l'emplacement de mémoire de retour,

Obj* pObj = new (param1, param2) Obj; 

correspond à appeler un operator new avec trois paramètres, sizeof(Obj) suivi de param1 et param2 et la construction de l'instance Obj dans la mémoire pointée par la valeur de retour de la coutume operator new.

Personnalisé operator new s s peuvent être définis globalement ou en tant que membres de classe implicitement statiques, auquel cas ils ne seront pris en compte que pour l'allocation d'instances de classe de ce type ou de types dérivés.

Il y a plus de comment et de pourquoi dans this FAQ.

+0

Une réponse parfaite - rien ne peut être ajouté ou enlevé. – Arafangion

+0

Cette réponse est en or pur –