2010-03-15 12 views

risposta

7

Se si utilizza boost, boost::ptr_vector potrebbe essere più adatto alle proprie esigenze.

In caso contrario, è possibile utilizzare shared_ptr come suggerito o eliminare manualmente gli elementi del vettore una volta terminato.

Dal punto di vista della manutenzione, shared_ptr sarebbe la soluzione preferita. Si noti, tuttavia, che lo shared_ptr può comportare alcune penalità in termini di prestazioni, che possono essere o non essere significative per la propria applicazione.

2

È un po 'eccessivo, ma per questo non esiste un puntatore intelligente molto migliore. Potresti anche prendere in considerazione i contenitori del puntatore di boost.

In C++ 0x sarà possibile memorizzare std::unique_ptr in contenitori, che è più vicino alle proprie esigenze.

+0

Sto usando boost :: shared_ptr – amitlicht

+0

+1 per contenitori di unique_ptr! – AshleysBrain

1

È inoltre possibile utilizzare Boost.PointerContainer. L'utilizzo di un shared_ptr esprime la proprietà condivisa. Ora, se sei sicuro, che i tuoi oggetti sono legati alla durata del contenitore, allora un PointerContainer è l'opzione migliore in termini di progettazione (è anche una parola?).

4

Se le prestazioni di basso livello/l'utilizzo della memoria non sono requisiti critici (ovvero il 97% di tutti i casi), basta andare con shared_ptr. È semplice e ben compreso.

Se si vuole davvero mantenere le cose strette e/o esprimere l'intenzione di proprietà in modo più preciso, allora boost::ptr_vector potrebbe essere migliore - ma se la classe non gestisce altra memoria, l'eliminazione manuale del distruttore non è così grande peccato come a volte siamo portati a credere ;-) Sono un grande sostenitore della RAII, ma lo faccio ancora di tanto in tanto.

Problemi correlati