Nei casi in cui vi è un desiderio che gli oggetti siano "condivisi" tra più contenitori, mi piacerebbe sapere qual è la migliore pratica in C ++. Ad esempio, quando si implementano alcuni algoritmi di percorso (come A *), ho implementato una matrice bidimensionale di Nodi (classe definita dall'utente), e voglio anche avere un Set, dove verranno aggiunti e rimossi Nodi specifici durante l'esecuzione dell'algoritmo. Tuttavia, quando aggiungo un Nodo nel Set, voglio memorizzare questo Nodo specifico (e non una copia), in modo che le modifiche negli oggetti del Set siano visibili anche nell'array bidimensionale. Immagino che ci siano 2 approcci:
- conserva diverse copie dei Nodi in Set e nell'array 2-d, e crea anche un meccanismo che sincronizzi le copie, in modo che le modifiche vengano passate dall'una all'altra. Tuttavia, sarebbe difficile da implementare e consumerebbe molta memoria, a causa di molte copie ridondanti dei nodi.
- i 2 contenitori (l'array bidimensionale e l'insieme) tengono semplicemente puntatori ai nodi. Quindi, quando voglio aggiungere un nodo specifico nell'insieme, recupero il puntatore a questo nodo dall'array 2-d e inserisco il puntatore nel Set.
Da allora, ho concluso che la seconda soluzione deve essere quella giusta, vorrei porre le seguenti domande:
- Durante l'apprendimento del C ++, ho trovato libri che consigliano di evitare di creare contenitori con puntatori . Quindi, dovrei accettare questo caso come eccezione alla regola?
- Come dovrei progettare in modo ottimale l' inizializzazione dei nodi e la distruzione (liberazione delle risorse), dal momento che sia l'array 2-d che il Set manterranno i puntatori?