?
Nexus schrieb:
Optimizer schrieb:
Die Gefahr sehe ich bei einem Destruktor mit delete genauso. Wenn jemand meint, meinen Code verbessern zu müssen und wenigstens etwas Skill hat, wird er den Destruktor zu entfernen versuchen und den Member durch einen smart pointer ersetzen. Dann kriegt er die Warnung (oder Fehler mit deinem scoped_ptr) und die Sache ist geklärt.
Oder er benutzt gerade einen Compiler/eine Warnstufe, mit der die Warnung nicht erkennbar ist, lässt die Warnung unter vielen unwichtigen untergehen oder ist einen Moment unachtsam und kompiliert danach nicht mehr. Selbst Menschen mit "Skill" passiert sowas dauernd wieder. Du solltest den Vorteil von Kompilierfehlern gegenüber eventuellen Warnungen nicht unterschätzen.
Jo, ist einsichtig. Dann lass ich mich mal so weit breitschlagen, dass wir nur den scoped_ptr nehmen, der dieses Problem nicht hat (also eigentlich würd ich es ja für ne Schwäche der Sprache halten ;)).
Natürlich kann man sein Anliegen durch einen Kommentar verdeutlichen, aber dann hast du wieder etwas, das bei delete nicht nötig ist.
Doch, der Kommentar muss beim delete dann auch hin. Sonst bin ich nämlich der erste, der das delete entfernt und einen smart pointer einsetzt. Und der letzte bin ich nicht...
Optimizer schrieb:
Schlechter als nen rohen Zeiger zu verwenden ist der Code mit dem smart_ptr sicherlich nicht.
Smart-Pointer haben zweifellos in sehr vielen Fällen Vorteile gegenüber rohen Zeigern. Dennoch würde ich nicht grundsätzlich davon ausgehen, dass sie nie schlechter sein können (unabhängig von dem Beispiel hier), besonders wenn keine klar überwiegenden Argumente existieren.
In diesem Fall find ich den Code mit smart pointer nicht schlechter. Daher würde ich an dem Prinzip festhalten, smart pointer als Member zu benutzen, als default sozusagen.