c++ - 抛出的对象分配在哪里?

标签 c++ exception-handling try-catch

<分区>

例如,当我在函数中使用 throw

try {
   // ...
   throw MyExceptionType()
   // ...
} catch(MyExceptionType& exp){ /* ... */ }

MyExceptionType 分配在哪里?它在堆栈上吗?如果是这样,在我的 catch block 中修改 exp 是否安全?在 catch 中调用一些其他函数并使用堆栈怎么样?

在类似的情况下,我有:

try {
   char my_array[32];
   throw my_array; 
} catch(char* error_string){ /* ... */ }

error_string 是否指向进程堆栈中的某处?如果我在 catch block 中调用一些函数,我可以遍历数组吗?

最佳答案

它依赖于实现。 g++ 4.4 尝试 malloc 内存,如果失败则尝试在系统范围的紧急缓冲区中构建异常,所有调用 std::terminate.

关于c++ - 抛出的对象分配在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18592992/

相关文章:

c++ - 自定义结构化存储 IPropertySetStorage

c++ - cocos2d-x v3 CallFunc 作为参数/变量如何

c++ - Undefined Behavior 和 Ill-formed 之间的区别,不需要诊断消息

visual-studio-2010 - 带有 xUnit、Assert.Throws 和 "Exception was unhandled by user code"的 Visual Studio

ios - Objective C - 捕获从 block 内部引发的异常

php - 从 try/catch block 中断

c++ - double 值计算过程中错误计数增加

python - 在变量中使用 except 和存储错误

c++ - 如果我不告诉要在 C++ 中抛出什么类型的对象,throw 语句会抛出什么?

javascript - Try/Catch/Finally with ESLint 期望在异步箭头函数结束时返回一个值