Frage zu Josuttis CountedPtr



  • Moin,

    ich habe mir gerade den CountedPtr von Nicolai Josuttis angeschaut.

    http://www.josuttis.com/cppbuch/sonst/countptr.hpp.html

    Guckt euch mal den Konstruktor an:

    // mit herkömmlichem Zeiger initialisieren
    // - p muss ein von new zurückgelieferter Wert sein
    explicit CountedPtr (T* p=0)
      : ptr(p), count(new long(1)) {
    }
    

    Dort wird ein Referenzzähler mit 1 angelegt auch wenn man den Default-Wert (Null-Zeiger) benutzt. Ist das nicht ein bisschen schwachsinnig?

    Sollte man da nicht besser einen seperataren Konstuktor ohne Parameter anlegen der dann keinen Referenzzähler erstellt oder diesen auf 0 initialisiert?!
    Und dann würde ich in dem Konstruktor den ich gepostet habe, Null-Zeiger durch assert verbieten.



  • Es funktioniert ja. (delete 0; macht quasi nix) Oft ist die Funktionalität wichtiger als die Geschwindigkeit. Aber klar, in einer eigenen, hoffentlich besseren, Implementation würde man einen leeren Konstruktor haben und 0 als Parameter für den Konstruktor mit Pointer wäre Undefined Behaviour. Oder du verwendest einfach boost::shared_ptr. *g*


Anmelden zum Antworten