How does `operator delete` deallocate the memory block for node of LinkedList
<pre><code>struct node
{
    node(int _value, node* _next) : value(_value), next(_next) {}

    int   value;
    node* next;
};

node *p = new node(10, NULL);
delete p;
</code></pre>

<p>Based on my understanding, <code>operator delete</code> will first call the destructor of <code>node</code>, then deallocate the raw memory block originally allocated for <code>p</code>.</p>

<p>Since <code>struct node</code> doesn't provide a customized destructor, the compiler will provide a default one. </p>

<p><strong>Question1</strong>>what does the default destructor look like?
For example,</p>

<pre><code>node::~node()
{
  next = NULL;
}
</code></pre>

<p><strong>Question2</strong>>should we define a destructor for <code>struct node</code> or not?
I assume that we don't have to explicitly provide such a destructor. The reason is that the member variable <code>next</code> doesn't own the pointed resource and it behaves as a <code>weak_ptr</code>. Is that correct?</p>
