title: Why in VC, both 'delete' and 'delete []' uses scalar deleting destructor?
body: <p>In my understanding for C++ memory model, only when object array is created by new[], and deleted by 'delete []', the scalar constructor/destructor are used, and compiler generates an internal for loop to iterate every element location.</p>
  
  <pre><code>int main()
  {
      B obj;
      B* pb = new B;//no scalar constructor
      delete pb;//scalar deleting destructor
  }
  </code></pre>
  
  <p>But I found when I use 'new' 'delete' to operate just one element, without using '[]', VC still generates code for 'scalar deleting descturctor' for debug version.</p>
  
  <p>So my question is:</p>
  
  <ol>
  <li>scalar constructor/destructor don't have to be appearing in pair, right? In my test program, I found there's only scalar deleting destructor.</li>
  <li>All objects created by new or new[], should have a scalar deleting destructor? Why one element still have this consideration, I don't see any necessity for one element's case as to process exception, stack unwinding, that should rely on an extra deleting destructor. Any reasons?</li>
  </ol>