【发布时间】:2020-12-10 13:39:32
【问题描述】:
这是 implementation libstdc++ 中的新运算符:
_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;
}
谁保证构造函数中的异常会释放分配的内存?
更新:感谢评论员 - 实际上我的意思是新表达式的异常安全。
【问题讨论】:
-
你能举个例子吗?异常是从哪里抛出的——来自
new还是来自构造函数?为正在构造的对象分配了什么内存或在构造函数中分配了一些内存? -
什么构造函数? new 运算符只是分配内存,它不构造对象。
-
什么构造函数?
-
@bolov new 操作符 肯定会调用构造函数(除了
new T的普通类型)。operator new函数 没有。是的,C++ 术语令人困惑。 -
因此,最好不要使用“new operator”这个词;事实上,标准本身只是偶尔地、不经常地这样做,而且我个人认为这是一种缺陷。
new是关键字,表达式new T是 new-expression。
标签: c++ exception-safety