title: What's the purpose of having a separate "operator new[]"?
body: <p>Looks like <code>operator new</code> and <code>operator new[]</code> have exactly the same signature:</p>
  
  <pre><code>void* operator new( size_t size );
  void* operator new[]( size_t size );
  </code></pre>
  
  <p>and do exactly the same: either return a pointer to a big enough block of raw (not initialized in any way) memory or throw an exception.</p>
  
  <p>Also <code>operator new</code> is called internally when I create an object with <code>new</code> and <code>operator new[]</code> - when I create an array of objects with <code>new[]</code>. Still the above two special functions are called by C++ internally in exactly the same manner and I don't see how the two calls can have different meanings.</p>
  
  <p>What's the purpose of having two different functions with exactly the same signatures and exactly the same behavior?</p>