Ja, Sie sollten Smart Pointer gegenüber bloßen Zeigern für fast alles bevorzugen. Aber das bedeutet nicht, dass Sie ::boost::shared_ptr
für die meisten dieser Fälle verwenden sollten. In der Tat denke ich, dass Sie shared_ptr
sparsam und vorsichtig verwenden sollten.
Aber für diese Zeiger verwenden Sie nicht shared_ptr
für Sie sollte oder verwenden, wenn Sie C++ 0x ::std::unique_ptr
haben. Und wenn sie nicht geeignet sind, sollten Sie einen intelligenten Zeigertyp finden.
Jetzt ist dies nicht immer die richtige Antwort, nur fast immer. Intelligente Zeiger sind von unschätzbarem Wert, um Speicherressourcen auch angesichts von Ausnahmen oder anderen derartigen Kuriositäten merklich zu verfolgen und freizugeben.
Es gibt Fälle, in denen Sie entweder Ihre eigene Smart-Pointer-Klasse schreiben oder keine verwenden müssen. Diese Fälle sind sehr selten, aber sie existieren.
Zum Beispiel ist die Verwendung eines intelligenten Zeigers in Ihrer eigenen Smart-Pointer-Klasse wahrscheinlich nicht das Richtige. Das Zeigen auf Stuff, das in einer C-Bibliothek zugeordnet ist, würde wahrscheinlich einen benutzerdefinierten Smart-Pointer erfordern, der free
anstelle von delete aufgerufen wird.Vielleicht möchten Sie einen dehnbaren Puffer, den Sie realloc
anrufen können und nicht aus irgendeinem Grund eine ::std::vector
verwenden möchten.
Aber im Allgemeinen ist ein intelligenter Zeiger (obwohl nicht normalerweise ::boost::shared_ptr
(oder in C++ 0x ::std::shared_ptr
)) die richtige Antwort auf Ihr Ressourcenverwaltungsproblem.
gibt es keine Leistungseinbuße mit shared_ptr? –
Keine, die Sie erkennen können, wenn Sie diese Frage stellen –
@Terry: Das wurde * perfekt * formuliert. – GManNickG