2009-02-25 12 views
5

in un esempio ho visto questa lineanuovo 2ª param, C++

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

Non c'era alcuna definizione spiegazione, corpo della funzione o della classe. Cosa significa il secondo parametro?

+0

Sei sicuro di averlo digitato correttamente? Non sembra esserci una variabile per accettare il risultato di una nuova. –

+0

Penso che doveva essere "Thing * pThing = new (getHeap(), getConstraint()) Thing (initval());". È dal n. 14 in C++ gotchas – CTT

+0

Grazie, CTT. Ora ha senso. –

risposta

19

È un'istanza della sintassi "posizionamento new". È per il passaggio di parametri aggiuntivi a una funzione di allocazione della memoria personalizzata.

considerando questo:

Obj* pObj = new Obj; 

corrisponde ad allocare nuova memoria chiamando operator new con un singolo parametro di tipo size_t e il valore di sizeof(Obj), e costruendo una nuova istanza Obj nella posizione di memoria restituito,

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

corrisponde a chiamare uno operator new con tre parametri, sizeof(Obj) seguito da param1 e param2 e costruzione dell'istanza Obj nella memoria indicata dal valore di ritorno dell'abitudine operator new.

Custom operator new s possono essere definiti globalmente, o come membri di classe staticamente impliciti, nel qual caso verranno considerati solo per l'allocazione di istanze di classe di quel tipo o tipi derivati.

C'è più come e perché in this FAQ.

+0

Una risposta impeccabile - nulla può essere aggiunto o rimosso. – Arafangion

+0

Questa risposta è oro puro –