This stupid code snipped already took my 2 hours, I cannot figure out why the destructor of the first element, the one with size 7, not called? What happens to the memory allocated for new uint16_t[7]?
#include <iostream>
using namespace std;
struct Node
{
    Node(uint16_t n) : p(new uint16_t[n]) {
        cout<<"Constructed with size= "<<n<<", memory addr: "<<(p)<<endl;
        for(uint16_t i=0; i<n; i++) p[i] = n;
    }
    ~Node() {
        cout<<"Destructor for p[0] = "<< *p <<" with memory addr: "<<p<<endl;
        delete[] p;
    }
    uint16_t *p;
};
int main()
{
    {
        Node nd1(7);
        {
            nd1 = Node(3);
            cout << "1st place holder" << endl;
        }
        cout << "2nd place holder" << endl;
    }
    return 0;
}
The output is
Constructed with size= 7, memory addr: 0x158cc20 Constructed with size= 3, memory addr: 0x158cc40 Destructor for p[0] = 3 with memory addr: 0x158cc40 1st place holder 2nd place holder Destructor for p[0] = 0 with memory addr: 0x158cc40 *** Error in `./a.out': double free or corruption (fasttop): 0x000000000158cc40 *** Aborted (core dumped)
 
     
    