Domanda

Questo è il metodo per la creazione di una variabile sul mucchio in C ++:

T *ptr = new T;

ptr si riferisce ad un puntatore alla nuova T, ovviamente. La mia domanda è: si può fare questo:

T *ptr = new T*;

Che sembra che potrebbe portare a qualche codice molto, molto pericoloso. Qualcuno sa se questo è possibile / come usarlo correttamente?

È stato utile?

Soluzione

int** ppint = new int*;
*ppint = new int;

delete *ppint;
delete ppint;

Altri suggerimenti

new T* restituisce un puntatore a un puntatore ad un T. Quindi la dichiarazione non è corretta, dovrebbe essere:

T** ptr = new T*;

E risiederà sul mucchio.

Sì, è possibile dichiarare un puntatore a un puntatore ... e sì, il puntatore sarà sul mucchio.

E 'stato citato come il motivo per cui potrebbe essere necessario qualcosa di simile. La cosa che viene in mente è un array dinamico. (La maggior parte delle implementazioni vettore utilizzano questo in realtà.)

// Create array of pointers to object
int start = 10;
SomeObject** dynamic = new SomeObject*[start];
// stuff happens and it gets filled
// we need it to be bigger
{
    SomeObject** tmp = new SomeObject*[start * 2];
    for (size_t x = 0; x < start; ++x)
        tmp[x] = dynamic[x];
    delete [] dynamic;
    dynamic = tmp;
}
// now our dynamic array is twice the size

Come risultato, si copia un gruppo di puntatori per aumentare la nostra gamma, non gli oggetti stessi.

Non si può fare

T *ptr = new T*;

in quanto il tipo di ritorno di new foo è "puntatore a foo" o foo *.

Si può fare

T **ptr = new T*;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top