2010-03-15 3 views

Antwort

7

Wenn Sie Boost verwenden, könnte boost::ptr_vector besser für Ihre Bedürfnisse geeignet sein.

Wenn nicht, dann können Sie entweder shared_ptr wie vorgeschlagen verwenden oder die Elemente des Vektors manuell löschen, wenn Sie damit fertig sind.

Aus Wartungssicht wäre shared_ptr die bevorzugte Lösung. Beachten Sie jedoch, dass shared_ptr einige Leistungseinbußen mit sich bringen kann, die für Ihre Anwendung von Bedeutung sein können oder auch nicht.

2

Es ist ein bisschen ein Overkill, aber es gibt keinen viel besseren intelligenten Zeiger dafür. Sie können auch die Pointer-Container von Boost in Betracht ziehen. In C++ 0x können Sie std::unique_ptr in Containern speichern, was näher an Ihren Bedürfnissen liegt

+0

Ich verwende boost :: shared_ptr – amitlicht

+0

+1 für Container von unique_ptr! – AshleysBrain

1

Sie können auch Boost.PointerContainer verwenden. Mit einem shared_ptr drückt Shared Ownership aus. Wenn Sie jetzt sicher sind, dass Ihre Objekte an die Lebensdauer des Containers gebunden sind, dann ist eine PointerContainer die bessere Option für das Design (ist das überhaupt ein Wort?).

4

Wenn Low-Level-Performance/Speicherverbrauch keine kritischen Anforderungen sind (dh 97% aller Fälle), dann gehen Sie einfach mit shared_ptr. Es ist einfach und gut verstanden.

Wenn Sie wirklich die Dinge festhalten und/oder die Besitzabsicht präzisieren wollen, dann ist boost::ptr_vector vielleicht besser - aber wenn Ihre Klasse keinen anderen Speicher verwaltet, dann ist das manuelle Löschen in Ihrem Destruktor nicht so groß Sünde, wie wir manchmal glauben gemacht werden ;-) Ich bin ein großer RAII-Befürworter, mache das aber immer noch von Zeit zu Zeit.

Verwandte Themen