gpt4 book ai didi

c++ - 由于抛出异常而超出范围时对象是否被销毁。 C++

转载 作者:行者123 更新时间:2023-11-28 01:42:04 28 4
gpt4 key购买 nike

<分区>

我读到一旦抛出异常,超出范围的对象将被销毁。所以我写了一个代码来测试它。

#include "stdafx.h"
#include <iostream>
using namespace std;

class E {
public:
int v = 0;
};

void f() {
E e;
E *pointer = &e;
e.v = 7;
throw pointer;
}

int main(void) {
E* MainPointer = new E;
try {
f();
}
catch (E* e) {
cout << e -> v; //was executed
MainPointer = e;
}
cout << MainPointer->v; //was executed
system("pause");
return 0;
}

输出为 77,这意味着 catch block 和最终 cout 都已执行。然而,我预计在最终 cout 会出现内存错误,因为 MainPointer 指向的对象现在应该已经被释放。

谁能澄清为什么在 f() 中声明的对象没有被释放。

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com