Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » smartpointer faq von virtual

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
25.03.2004, 13:49 Uhr
RHBaum




Zitat:
Aber nun egal, ob der Destruktor als private oder protected deklariert wird. Dieser Destruktor wird also niemals aufgerufen. Stimmst du mit mir überein?

Aehm, was meinst du zu was es friend deklarationen gibt ?
Und Protected Konstruktur ist ne gute Moeglichkeit, ne Klasse nicht ohne Ableitung instanzierbar zu machen ... ohne das man die klasse abstrakt macht .... (zugegeben, braucht man eher selten)

Ciao ...

Dieser Post wurde am 25.03.2004 um 13:50 Uhr von RHBaum editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
26.03.2004, 08:40 Uhr
ao

(Operator)



Zitat:
~Dirk23 postete
Aber nun egal, ob der Destruktor als private oder protected deklariert wird. Dieser Destruktor wird also niemals aufgerufen.

Doch, wird er.

C++:
        // Rem a references
        void rem_ref() { if (!(--refs)) delete this;}


Der Zähler wird dekrementiert, und wenn er 0 erreicht, wird "delete this" ausgeführt. Im Gegensatz zu free() bewirkt delete nicht nur die Freigabe des Speichers, sondern vorher auch den Aufruf des entsprechenden Destruktors.

Mach ein kleines Testprogramm, starte es im Debugger und setze einen Breakpoint auf den Destruktor, dann siehst du es.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
26.03.2004, 09:24 Uhr
~Dirk23
Gast


@ao:
Vielen Dank für deine Antwort. Du hast absolut recht. Nun ist mir endlich alles klar. Dank deiner Erklärung über delete konnte ich es endlich verstehen. Nun werde ich in Zukunft keine Verständnisprobleme mehr mit privaten bzw. protected Destruktoren haben.
Jetzt ist mir auch klar, warum Virtual als Kommentar geschrieben hat, dass nur interne Zerstörung erlaubt ist. Und dadurch, dass noch der Zuweisungsoperator und der Copy-Konstruktor verboten sind, kann ein erstelltes share_t Objekt mittels new nicht kopiert oder von außen zerstört werden. Damit ist dann gewährleistet, dass das mit new erstellte share_t Objekt in der Smartpointerklasse absolut sicher ist. Echt raffiniert das Ganze.

mfg

Dirk
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
26.03.2004, 09:35 Uhr
ao

(Operator)



Zitat:
RHBaum postete
[quote]Aber nun egal, ob der Destruktor als private oder protected deklariert wird. Dieser Destruktor wird also niemals aufgerufen. Stimmst du mit mir überein?

Aehm, was meinst du zu was es friend deklarationen gibt ? [/quote]
Aehm, virtuals share_t enthält aber kein friend, und das ist auch gut so, ein Smartpointer sollte keine Freunde haben, vor allem nicht solche, die ihn hinterrücks abknallen würden.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
29.03.2004, 10:20 Uhr
RHBaum




Zitat:
ein Smartpointer sollte keine Freunde haben, vor allem nicht solche, die ihn hinterrücks abknallen würden.

Nein, solche Freunde moecht ich auch ned ....
Aber es ging doch um Sinn und Unsinn von privaten / protected Ctors / Dtors ?

Ciao ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: