小编Joh*_*Doe的帖子

如何在堆栈上分配的异常超出了它们的范围?

在下面的代码中,基于堆栈的变量"ex"被抛出并被捕获到超出声明ex的范围的函数中.这对我来说有点奇怪,因为(AFAIK)基于堆栈的变量不能在它们被声明的范围之外使用(堆栈被展开).

void f() {
    SomeKindOfException ex(...);
    throw ex;
}

void g() {
    try {
        f();
    } catch (SomeKindOfException& ex) {
        //Handling code...
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经向SomeKindOfException的析构函数添加了一个print语句,它显示ex在f()中超出范围后被破坏但是它在g()中被捕获并且一旦它超出范围就再次被破坏.

有帮助吗?

c++ callstack exception-handling exception

23
推荐指数
4
解决办法
2431
查看次数

动态内存分配中使用的堆与数据结构之间的连接是什么?

可能重复:
为什么两个不同的概念都称为"堆"?

我用Google搜索过,但找不到这个问题的答案; 动态内存分配中使用的堆与数据结构之间的连接是什么?内存是否以与堆数据结构类似的方式组织在堆上?如果是这样,这看起来很奇怪,因为获取内存应该是随机访问AFAIK(即O(1)),但是从堆中查找项目不会在恒定时间内完成.

那么,这只是堆的重载意义,可以这么说,还是有某种连接?

c++ heap heap-memory data-structures

3
推荐指数
1
解决办法
1704
查看次数