これは、libstdc++ の new 演算子の実装です。
_GLIBCXX_WEAK_DEFINITION void *
operator new (std::size_t sz) _GLIBCXX_THROW (std::bad_alloc)
{
void *p;
/* malloc (0) is unpredictable; avoid it. */
if (__builtin_expect (sz == 0, false))
sz = 1;
while ((p = malloc (sz)) == 0)
{
new_handler handler = std::get_new_handler ();
if (! handler)
_GLIBCXX_THROW_OR_ABORT(bad_alloc());
handler ();
}
return p;
}
コンストラクターの例外が割り当てられたメモリを解放することを誰が保証しますか?
Upd:コメンテーターに感謝します - 実際には、新しい式の例外安全性を意味していました。