Si può dichiarare un puntatore sul mucchio?
-
16-09-2019 - |
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?
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*;