J'ai une très grande classe étalée qui est essentiellement une liste chaînée tridimensionnelle très artificielle. Je veux être capable de le «compiler», ce qui signifie que je veux terminer la liste, de sorte que seuls les accès en lecture puissent être faits, puis déplacer tous les éléments dans des espaces mémoire contigus. Ma solution brute est la suivante:Je fais des choses géniales avec le placement nouveau, et les choses échouent. Solutions de contournement?
#include <new>
...
MyListNode* pool = new MyListNode[length];
new(&pool[position]) MyListNode();
Le problème est que j'ai essentiellement deux classes, l'une attribuée avec nouvelle et l'autre alloué avec cette méthode ici, et quand je tente de supprimer l'un des objets attribués par la La méthode ci-dessus, glibc tue le programme à cause d'un pointeur invalide. La solution naturelle est de créer deux classes, et d'utiliser simplement le polymorphisme d'exécution pour fournir une interface mais deux implémentation, etc. Est-il possible que le standard de mémoire en C++ permette ce type de pokery jiggery?
Avez-vous un exemple court mais complet qui reproduit le problème? –