This is a code I have been trying to understand how it works.

```
#include <iostream>

using namespace std;

class A
{
public:
    int variable;

    A()
    {
        cout << "Default Constructor\n";
    }

    A(int variable_)
    {
        cout << "Overloaded Constructor\n";
        variable = variable_;
    }

    A(A& Object)
    {
        cout << "Copy Constructor\n";
        variable = Object.variable;
    }

    ~A()
    {
        cout << "Destructor\n";
    }
};

void main()
{
    {
        A* PA1 = new A(1);

        cout << "\n";

        A* PA2 = &(A(*(PA1)));

        cout << "Second\n\n";

        A* PA3 = &(A(1));

        cout << "\n";

        A* PA4 = new A(*(PA3));
    }

    cout << "\n";
    system("pause");
}

```

Why is destructor called after initialization of `PA2`? What does this mean - `&(A(*(PA1))) and &(A(1))`?

This is output of this code:

[![enter image description here](https://i.stack.imgur.com/TYunO.jpg)](https://i.stack.imgur.com/TYunO.jpg)