🔒 Locked
delete this
Advertisement
Original Post
I can''t remember the exact details, but it is legal - providing you don''t touch any member variables or functions after the call. You''ve got to be careful that the caller knows that its about to happen as well usually so it doesn''t assume the object still exists.
In MFC for example, there is a couple of points where its valid to do this if you are going to since the object will be discarded afterwards.
In MFC for example, there is a couple of points where its valid to do this if you are going to since the object will be discarded afterwards.
I used delete this; to write a binary tree class once, and it worked fine. If you did delete this; it would call the destructor, which called the child node destructors, which contained delete this;, and so on, so you could deallocate a node and all of it''s sub-nodes with one statement: delete this;
And how do you know how the object was allocated?
My opinion: C++ should be more strict. Doing stuff like this is not really OO and it doesn''t really serve a purpose.
My opinion: C++ should be more strict. Doing stuff like this is not really OO and it doesn''t really serve a purpose.
quote:
Original post by Fredrik Dahlberg
And how do you know how the object was allocated?
If the constructor is private and creation methods only ever do dynamic allocation, you know.
quote:
My opinion: C++ should be more strict. Doing stuff like this is not really OO and it doesn''t really serve a purpose.
It is really OO, and it does really serve a purpose. You just haven''t seen any situations where it''s useful yet.
How appropriate. You fight like a cow.
Refcounted classes, like COM classes, are typically implemented this way. Since they''re always created on the heap, it''s guaranteed. The Release() method basically looks like
Perfectly valid, and good OOP if you know how things have to be allocated (via CoCreateInstance, or whatever), IMO.
I like pie.
if( -- m_cRefCount == 0 )
delete this;
return m_cRefCount;
Perfectly valid, and good OOP if you know how things have to be allocated (via CoCreateInstance, or whatever), IMO.
I like pie.
quote:
Original post by RenderTarget
if( -- m_cRefCount == 0 )
delete this;
return m_cRefCount;
Though of course, if you take that fallthrough approach, you''d probably want to save m_cRefCount to a temporary variable; who knows whether it will still be valid after deletion...
Superpig
- saving pigs from untimely fates, and when he''s not doing that, runs The Binary Refinery.
Enginuity1 | Enginuity2 | Enginuity3 | Enginuity4
Sneftel: No, suicide is never a solution 
Having a private constructor? Ok, give me an example of this.
Ok, it might be useful but there must be better solutions and c++ is not really OO. But it''s like when I see a printf-statement in c++ code, I still go bezerk.
Having a private constructor? Ok, give me an example of this.
Ok, it might be useful but there must be better solutions and c++ is not really OO. But it''s like when I see a printf-statement in c++ code, I still go bezerk.
quote:
Original post by Corrail
Just wanted to know if this command is legal in a method of a class of struct:
delete this;
It is legal, but it is rarely a good thing to do.
Topic Locked
This topic has been locked by a moderator. New replies are not allowed.
Sign in to reply to this topic.
Advertisement