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*