Il s'agit de la méthode de création d'une variable sur le tas en C ++:
T *ptr = new T*;
5 Réponses :
int** ppint = new int*; *ppint = new int; delete *ppint; delete ppint;
Oui, vous pouvez déclarer un pointeur à un pointeur ... et oui, le pointeur sera sur le tas. P>
et il réside sur le tas. p> p> nouveau t * code> renvoie un pointeur sur un pointeur sur un T. Donc, la déclaration n'est donc pas correcte, il devrait être:
Vous ne pouvez pas faire puisque le type de retour de vous pouvez faire p> nouveau foo code> est "pointeur à foo" ou
foo * code>. p>
Il a été mentionné comme pourquoi vous pourriez avoir besoin de quelque chose comme ça. La chose qui vient à l'esprit est une matrice dynamique. (La plupart des implémentations vectorielles utilisent cela réellement.)
// 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
C ++ est très cohérent dans chaque sous-language en informatique i> :)
Pendant que vous avez déjà eu des réponses vous montrant la syntaxe, jusqu'à présent, personne ne vous a demandé pourquoi vous avez besoin de cela. Cela me semble sûrement méfiant.
Je pensais juste que c'était intéressant. Je n'avais jamais envisagé ça. Je n'ai pas besoin de le besoin (en plus, peut-être, optimiser les routines rarement utilisées pour la consommation de mémoire).
L'une des choses essentielles à réaliser des pointeurs est qu'il y a absolument rien i> spécial à leur sujet. Ce sont des types pouvant être alloués, tout comme n'importe quel autre type. Ils peuvent exister sur le tas, sur la pile, en tant que variables statiques ou autre chose que vous pouvez faire avec n'importe quel autre type. Vous pouvez créer des pointeurs ou des références. Ce ne sont que des types.
Pour référence: la création d'un pointeur sur le tas ne réduit pas la consommation de mémoire, elle augmente. Bien que votre pointeur sur le INT puisse être créé sur le tas, vous devez créer un pointeur sur le pointeur sur la pile.