What will happen if when say delete this ?
Answers were Sorted based on User's Feedback
Answer / mms zubeir
There are two scenarios:
1. Using "delete this;" in destructor
Here the call will be a recursive call to the destructor
infinitely. So the program hangs here.
2. Using "delete this;" in other members of a class
including constructor.
In this case, the call is a sucide call since the object
tries to delete itself which is nothing but sitting in a
space and destroy that space itself. That is definitely a
memory crash.
| Is This Answer Correct ? | 13 Yes | 4 No |
Answer / hidden prairie
delete this will call the destructor, but should not be
called in the destructor but in any other member function.
| Is This Answer Correct ? | 8 Yes | 0 No |
Answer / hitout
There are different cases to this
1) If the memory is allocated in stack, delete this should
not be called since it calls destructor twice.
2) delete this can be called in all functions except
destructor if the memory is allocated on heap(ie if new
operator is used and the object is not explicitly deleted).
3) Delete this in destructor will always cause an infinite loop.
| Is This Answer Correct ? | 6 Yes | 1 No |
Answer / hemant
There are two scenarios:
1. Using "delete this;" in destructor
Here the call will be a recursive call to the destructor
infinitely. So the program hangs here.
2. Using "delete this;" in other members of a class
including constructor.
In this case, the call is a sucide call since the object
tries to delete itself which is nothing but sitting in a
space and destroy that space itself. That is definitely a
memory crash.
| Is This Answer Correct ? | 4 Yes | 2 No |
Answer / priya
Using delete this in destructor will lead to recursive loop
which will lead to Stack overflow...so avoid it over
here...however there are few times where your code with
delete this will just work fine..like in the usage of
garbage colletors in C++.Chk the below code...which works
with no issues:
class temp
{
public:
temp(){std::cout<<"Constructor"<<std::endl;}
~temp(){std::cout<<"Destructor"<<std::endl;}
void destroy() {std::cout<<"In class
temp"<<std::endl;delete this;}
};
int main()
{
temp *t = new temp;
t->destroy();
return 0;
}
| Is This Answer Correct ? | 2 Yes | 0 No |
Answer / sudhir
delete this will not work because 'this' is not available to
global functions .this is only available to class member
functions.
| Is This Answer Correct ? | 0 Yes | 3 No |
Answer / dee
delete "this" lead in calling the destructor twice.
"this" poanter is related to object and the destructor is
called when the object goes out of scope.
| Is This Answer Correct ? | 2 Yes | 6 No |
How to reduce a final size of executable?
How many storage classes are available in C++?
How do you differentiate between overloading the prefix and postfix increments?
What is c++ hiding?
Using a smart pointer can we iterate through a container?
Write some differences between an external iterator and an internal iterator? Describe the advantage of an external iterator.
Define the process of handling in case of destructor failure?
What are put and get pointers?
if i want cin 12345678910 and cout abcdefghij. so how can i create the program?. example : if i key in 8910 so the answer is ghij.
What is the latest c++ standard?
Give 10 points of differences between C & C++.
Describe run-time type identification?