【发布时间】:2020-06-18 14:45:06
【问题描述】:
如果我从函数 h() 中抛出一些字符串
f()->g()->h()
这样
throw std::string("error");
并且只在 f() 中捕获。程序在哪里为这个字符串分配内存?显然它不能在 h() 的堆栈上分配它。如果这是 f() 堆栈,它以什么方式知道它应该分配到什么位置?
【问题讨论】:
-
"...异常对象是 unspecified storage 中的临时对象,由 throw 表达式构造...":来源: en.cppreference.com/w/cpp/language/throw
-
std::bad_alloc总是让事情变得复杂。 -
当程序未能为异常对象分配存储空间时,乐趣就开始了。我认为有些实现只是在启动时为此目的预留了一块内存?