今天看到C++ primer plus p625页中的一句话:“throw语句则处理try块和throw块之间整个函数调用序列(嵌套调用)放在栈中的对象”,那么函数中如果有类似string * ps = new string("hello world");这种代码,那么是仅仅释放ps的空间,还是会加上new出来的空间也一起释放呢?
1条回答 默认 最新
幻灰龙 2021-02-03 14:08关注知识点:
- try-catch应该被用类处理异常问题
- new/delete应该配对使用,没有配对使用,是一种错误
问题:
- 如果是栈上变量,抛出异常的时候,变量会被释放,反向调用对应的反初始化(例如析构)。这个处理过程是 Stack unwinding 的过程。
- 如果堆上变量,分配的内存在异常点不会被自动释放,这属于错误,不属于异常
解决:
- 正确理解try-catch解决的问题是什么,区分异常和错误
- 一般建议不要在C++里使用异常
参考:
解决 无用评论 打赏 举报