Dépend de ce que vous entendez par "etc", dans "ajouter, etc". Si "etc" inclut "remove", alors vous avez le problème évident que si vous supprimez quelque chose au milieu de votre liste, alors pour maintenir l'indexation vous devez tout décaler vers le bas, ce qui signifie mettre à jour tout les pointeurs next
.
Je pense que vous avez peut-être trop simplifié votre exemple. Si vous avez besoin d'un stockage contigu, utilisez un vecteur (P
ou Item
s'il y a quelque chose d'utile dans Item
que vous avez supprimé). Si vous avez un stockage contigu, il n'y a aucun avantage à avoir un pointeur next
, puisque vous pouvez simplement le calculer en Item
, en ajoutant 1 à this
(puis en vérifiant une limite pour vous assurer que vous n'avez pas atteint la fin).
Si vous avez besoin absolument le champ pointeur next
public, car il fait partie d'une certaine interface que vous implémentez que vous ne pouvez pas changer, vous pouvez le mettre à jour dans le constructeur de copie et operator=
pour Item
, et l'interface a mieux interdire aux clients d'y écrire.
Il est impossible de demander à l'allocateur d'allocation de mémoire contiguë pour des allocations distinctes, si c'est ce que vous demandez. Comment cela fonctionnerait-il? Que se passe-t-il si, lorsque vous décidez d'allouer, l'adresse "suivante" est déjà occupée? Que faire si l'allocateur impose une surcharge, pour ses propres structures de contrôle (comme le font presque tous les allocateurs généraux), de sorte que l'allocation d'un Item
nécessite plus de sizeof(Item)
octets? Vous pouvez obtenir le comportement que vous voulez pendant un certain temps avec un fixed-size allocator, mais il a finalement besoin d'un nouveau bloc, ou vous supprimez quelque chose, et la relation ne tient plus.
C'est bizarre. Je suggère d'utiliser [] ou next() - Pas les deux. Vous devrez également vous assurer que le tableau est alloué en une seule pièce, malgré le pointeur arbitraire * suivant. Vous voudrez peut-être regarder QList à la place (qui est une liste liée avec Indique afaik http://doc.qt.nokia.com/4.6/qlist.html regardez la source) –
Avez-vous des raisons spécifiques de ne pas utiliser conteneurs de bibliothèque standard? –
@Ronny: Ceci est juste un exemple très simplifié pour illustrer ce que j'ai besoin de savoir: s'il y a un moyen standard de forcer les limites de la mémoire, je peux utiliser, au lieu d'avoir à faire ma propre maintenance. – slashmais