C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Wann wird der this Zeiger "genutzt"?

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Markus Moll
Guest





PostPosted: Mon Dec 15, 2003 11:50 am    Post subject: Wann wird der this Zeiger "genutzt"? Reply with quote



Hallo NG

Ich bin heute über eine Stelle in meinem Code gestolpert, an der innerhalb
einer Memberfunktion einer Klasse der letzte smart pointer auf *this
zerstört wurde. *Gulp*
(Der smart_ptr ist eine referenzzählende non-intrusive Implementierung, die
ich hier aus Platzgründen nicht posten möchte. Man nehme an, sie verhalte
sich, wie man es erwartet) Um das zu demonstrieren (und nur zur
Demonstration, das untenstehende Zeug macht so nicht viel Sinn):
---
struct A
{
void f();
};

smart_ptr<A> ptr;
void setPtr(smart_ptr<A> newA) { ptr = newA; } // (3)
void A::f() { setPtr( smart_ptr<A>(new A()) ); }

int main()
{
setPtr(smart_ptr<A>(new A())); // (1)
ptr->f(); // (2)
}
---
Hier wird wegen (2) in (3) im Zuweisungsoperator des smart_ptr delete auf
das in (1) erstellte A aufgerufen (und somit auch der Speicher
freigegeben). Nun darf nach delete x; ja auf x nicht mehr zugegriffen
werden, oder wie der Standard sagt: "The effect of using an invalid pointer
value [...] is undefined" (3.7.3.2, (4)). Ich frage mich jetzt, was denn
nun "using" genau heißt (vielleicht brauche ich eine neue Brille, aber ich
habe es nicht gefunden). Ist der Zeiger schon "geused", wenn er auf dem
Stack hin- und her"gepusht"/"popt" wird? Das könnte der Compiler bei der
Rückkehr von delete ja schon noch tun... Sprich: mich stört, daß es in
einer Memberfunktion passiert, in der this implizit vorhanden ist.

Bitte schlagt mir keine Alternativimplementierung vor. Ich bin mir bewußt,
daß das a) häßlich und b) unnötig ist. Ich habe mich nur an dieser Stelle
gefragt, ob dieser Code noch standardkonform ist oder nicht.

Danke schon mal im voraus
Markus

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Karl Heinz Buchegger
Guest





PostPosted: Mon Dec 15, 2003 3:48 pm    Post subject: Re: Wann wird der this Zeiger "genutzt"? Reply with quote



Markus Moll wrote:
Quote:

werden, oder wie der Standard sagt: "The effect of using an invalid pointer
value [...] is undefined" (3.7.3.2, (4)). Ich frage mich jetzt, was denn
nun "using" genau heißt (vielleicht brauche ich eine neue Brille, aber ich
habe es nicht gefunden). Ist der Zeiger schon "geused", wenn er auf dem
Stack hin- und her"gepusht"/"popt" wird?

'Using' bedeutet 'using', also: jegliche Verwendung, wozu auch immer.

int * p = new int;
delete p;
int * q = p; // 'using' p, -> undefined.

Quote:
Das könnte der Compiler bei der
Rückkehr von delete ja schon noch tun...

Der Compiler selbst darf einiges was Du nicht darfst Smile
Der Compiler kennt ja seine eigene Implementierung und darf
dieses Wissen auch benutzen.

--
Karl Heinz Buchegger
[email]kbuchegg (AT) gascad (DOT) at[/email]

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.