je définir un vecteur:allocation de mémoire pour _M_start et _M_finish dans un vecteur
vector< int, MyAlloc< int> > *v = new vector< int, MyAllooc< int> > (4);
MyAlloc est allouant un espace pour seulement 4 ints. La mémoire de _M_start, _M_finish et _M_end_of_storage est allouée sur le tas avant la mémoire pour les 4 ints. Mais qui alloue cette mémoire pour _M_start, _M_finish et _M_end_of_storage? Je veux allouer cette mémoire moi-même. Qu'est-ce que je dois faire? Ne pas utiliser new
pour allouer le vecteur.
Ceci est cohérent avec ce que j'ai vu. Ai-je raison de comprendre que l'espace pour (_M's) est alloué par "new" en dehors de MyAlloc? La raison pour laquelle je pose cette question est que malgré un certain nombre d'instructions d'impression, je ne peux pas comprendre où MyAlloc alloue de l'espace pour les _M. Et si l'espace pour _M est alloué par "new" et non MyAlloc, alors comment puis-je prendre le contrôle de cette allocation d'espace? –
Oui, 'MyAlloc' est simplement un objet auxiliaire que le vecteur peut appeler quand il le souhaite. 'new' ne connaît pas les allocateurs, il alloue juste de l'espace pour un vecteur. Vous "prenez le contrôle" de l'allocation des variables membres exactement comme je l'ai dit dans ma réponse: En les allouant où vous voulez. Si vous utilisez 'new' pour allouer le vecteur, les membres du vecteur sont alloués là où' new' décide (sur le tas). Si vous faites du vecteur un membre de classe, tous ses membres sont alloués dans le cadre de cette classe. Si vous utilisez le placement nouveau, ils sont alloués où vous voulez. – jalf