Si dovrebbe usare new
quando desideri che un oggetto rimanga in esistenza fino a quando non lo hai delete
. Se non si utilizza new
, l'oggetto verrà distrutto quando esce dall'ambito. Alcuni esempi di questo sono:
void foo()
{
Point p = Point(0,0);
} // p is now destroyed.
for (...)
{
Point p = Point(0,0);
} // p is destroyed after each loop
Alcuni diranno che l'uso di new
decide se l'oggetto è sul mucchio o lo stack, ma questo è vero solo di variabili dichiarate all'interno di funzioni.
Nell'esempio seguente, la posizione di "p" sarà dove viene assegnato l'oggetto contenente, Foo. Preferisco chiamare questa allocazione "sul posto".
class Foo
{
Point p;
}; // p will be automatically destroyed when foo is.
allocazione (e liberazione) oggetti con l'uso di new
è molto più costoso che se sono allocati sul posto per cui il suo uso deve essere limitato a dove necessario.
Un secondo esempio di quando allocare tramite new
è per gli array. Non è possibile * modificare la dimensione di un array sul posto o di uno stack in fase di esecuzione, in modo che, quando è necessario un array di dimensioni indeterminate, questo debba essere assegnato tramite nuovo.
E.g.
void foo(int size)
{
Point* pointArray = new Point[size];
...
delete [] pointArray;
}
(* nitpicking preventiva - sì, ci sono le estensioni che consentono allocazioni dello stack di dimensioni variabili).
fonte
2009-03-24 22:56:35
duplicato - troppe volte per contare –
come ha detto Neil, questo è stato chiesto innumerevoli volte. – Naveen