C++ 程序在哪里为抛出对象分配内存?

C++ 程序在哪里为抛出对象分配内存?,c++,memory,stack,throw,C++,Memory,Stack,Throw,如果我从函数h()中抛出一些字符串 这样 throw std::string("error"); 并且只在f()中捕获。程序在哪里为这个字符串分配内存?显然,它不能在h()的堆栈上分配它。如果这是f()的堆栈,那么它以什么方式知道应该在什么位置分配 如果这是f()的堆栈,那么它以什么方式知道应该在什么位置分配 它是以未指定的方式分配的临时对象 从本标准的章节: 3 A初始化一个临时对象,称为异常对象,其类型是通过从throw的操作数的静态类型中删除任何顶层并将类型从“数组ofT”或“函数ret

如果我从函数h()中抛出一些字符串

这样

throw std::string("error");
并且只在f()中捕获。程序在哪里为这个字符串分配内存?显然,它不能在h()的堆栈上分配它。如果这是f()的堆栈,那么它以什么方式知道应该在什么位置分配

如果这是
f()
的堆栈,那么它以什么方式知道应该在什么位置分配

它是以未指定的方式分配的临时对象

从本标准的章节:

3 A初始化一个临时对象,称为异常对象,其类型是通过从throw的操作数的静态类型中删除任何顶层并将类型从“数组of
T
”或“函数returning
T
”调整为“指向
T
”或“分别指向返回
T
”的函数的指针…”

4异常对象的内存以未指定的方式分配,除非[]中另有说明


“…异常对象是由抛出表达式构造的未指定存储中的临时对象…”:source:std::bad_alloc总是让事情变得复杂。当程序无法为异常对象分配存储时,乐趣就开始了。我想有些实现只是在启动时为此留出一块内存?
throw std::string("error");