Shared Pointer selbst schreiben - Problem mit Copy-Konstruktor
-
Hi.
Ich möchte gerne einen Shared Ptr (wie boost::shared_ptr) selbstschreiben, den ich auch in den STL Containern nutzen kann.
Also std::vector< SharedPtr<Foo> > soll z.B. möglich sein.
Im Copy-Konstruktor muss man doch den Referenz-Zähler erhöhen, oder? Aber beim Copy-Konstruktor muss eine const referenz übergeben werden, damit es mit den Containern kompiliert.
SharedPtr(const SharedPtr& rhs) { // Wie soll ich hier den Referenz-Zähler von rhs erhöhen, wenn es eine const-Referenz ist? }Oder macht man das völlig anders?

-
Hallo,
innerhalb von Memberfunktionen kannst du auf die Member einer Klasse zugreifen.
Sehe dein Problem nicht ganz.
mfg
v R
-
Der Pointer auf den Referenzzähler mag vielleicht const sein, aber er zeigt nicht auf const.
-
Hmmm, ich habe gerade festgestellt, das ich überhaupt nicht von rhs ändern muss, sondern nur bei der Kopie.
Hier ran konnte ich mich orientiert.
http://www.ogre3d.org/docs/api/html/OgreSharedPtr_8h-source.html
Allerdings verstehe ich dort beim besten Willen nicht warum der Use Count auf dem Heap angelegt wird. Weiß das vielleicht jemand?
-
Wo sonst? Denk doch mal die Alternativen durch ...
-
Ja ganz normal als int-Membervariable mache ich das.
Ist das falsch?
-
Oder meinstest du jetzt wo man die Erhöhung des Referenz-Zählers machen muss?
Ich dachte in Kopie und Quelle.
-
Folgendes Szenario:
A wird erzeugt und mit einem neuen Heap-Objekt initialisiert
B wird als Kopie von A erzeugt
C wird als Kopie von A erzeugtQuizfrage: Welche Werte haben die einzelnen Referenzzähler? Welchen sollten sie haben?
-
Alle Zähler sollten auf 3 sein.
Ich habe gerade gemerkt das meine Klasse mit int als Member und nicht als Zeiger auf int die Werte 1, 2, 2 ausgibt. Mit Zeiger 3, 3, 3
-
Hmm, Glück gehabt. Ich hab das nämlich leider solange editiert, bis es falsch war ... eigentlich meinte ich, dass C als Kopie von B erzeugt wird. Aber wenn dir der Fehler so schon auffällt
