SharedPtr<Base> mit "Derived" class
-
Die Std-Library ist orthogonal ausgelegt. Es gibt keine zwei Funktionen oder Klassen die das gleiche machen. Deshalb das Konzept der Container mit den Iteratoren und den Algorithmen.
Eine Ausnahme bildet da std::string, das ist eine hochgradig monolithische Klasse, deren Methoden alle durch Iteratoren und einem Algorithmus aus algorithm implementierbar sind.
Ein weiterer Schwachpunkt war std::auto_ptr, der mittlerweile ja auch deprecated ist.Aber das schönste an der STL ist,d ass sie getestet ist und quasi keine Fehler innehat. Klar spacken gewisse Compiler (*hust hust* Sone komm her *hust hust*) manchmal rum und haben Bugs (gerade wenn es um Template Magie geht), aber insgesamt sind die großen Compiler in dem Bereich nahezu fehlerfrei, würde ich mal behaupten.
Dass dein CustomPtr die Funktionalität der "offiziellen" Smart Pointer hier einkapselt und durch Flags steuerbar macht finde ich ja gar nichtmal schlecht. Aber ich würde (und empfehle es dir hiermit) intern trotzdem die std::***_ptr nutzen. Und mit Type-Erasure lässt sich da sicherlich was echt gutes draus basteln, so dass du eine (abstrakte) Oberklasse hast, die du an jeder Stelle verwenden kannst, Typinformationen aber trotzdem nicht verlierst und sie durch Flags steuern kannst.