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?
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?
È 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.
Una risposta impeccabile - nulla può essere aggiunto o rimosso. – Arafangion
Questa risposta è oro puro –
Sei sicuro di averlo digitato correttamente? Non sembra esserci una variabile per accettare il risultato di una nuova. –
Penso che doveva essere "Thing * pThing = new (getHeap(), getConstraint()) Thing (initval());". È dal n. 14 in C++ gotchas – CTT
Grazie, CTT. Ora ha senso. –