newは内部で以下のように動作している。
コンストラクタの時点でメモリは確保されているが、
例外を送出すると自動で解放されるようになっている。

operator new(size_t s)
{
 void* p = NULL;
 try {
  p = malloc(size);
  if (p == NULL)
   throw std::bad_alloc();
  ctor(p);
 }
 catch (...) {
  free(p);
  throw;
 }
}