Eduard Rostomyan
Eduard Rostomyan

Reputation: 6546

Destructor direct call in C++

Hence the code below.

class A
{
    int x;
public:
    A() {x = 3;}
};


int main()
{
    void* mem = operator new(sizeof(A));
    A* obj = static_cast<A*>(new(mem)(A));
    std::cout << obj->x << std::endl;
    obj->A::~A();
    std::cout << obj->x << std::endl;
}

My first question is: Why I can directly call the destructor of A; My second question is: Why the output is:

3
3

The the object obj is not deleted after the destructor call? The second 3 bothers me.

Upvotes: 2

Views: 796

Answers (1)

Baum mit Augen
Baum mit Augen

Reputation: 50053

Why can I call the destructor?

Because it is a public member function, and you can call public member functions.

Why is the object not deleted?

In your specific case, it still exists because A has a trivial destructor.

If it had a non-trivial one, it would be deleted in the sense that you are not allowed to use it anymore. If you do anyways, you have undefined behavior.

For a more detailed discussion on that read this.

Upvotes: 8

Related Questions