gpt4 book ai didi

c++ - 对象在堆栈上创建之前可以展开吗?

转载 作者:太空狗 更新时间:2023-10-29 21:30:38 25 4
gpt4 key购买 nike

这几天我们一直在调试一个奇怪的案例,并在一定程度上隔离了这个错误,但它仍然没有任何意义。也许这里的任何人都可以给我一些线索。

问题是部分代码中发生访问冲突。

基本上我们有这样的东西:

void aclass::somefunc() {
try {
erroneous_member_function(*someptr);
}
catch (AnException) {
}
}

void aclass::erroneous_member_function(const SomeObject& ref) {
// { //<--scope here error goes away
LargeObject obj = Singleton()->Object.someLargeObj; //<-remove this error goes away

//DummyDestruct dummy1//<-- this is not destroyed before the unreachable

throw AnException();

// } //<--end scope here error goes away

UnreachableClass unreachable; //<- remove this, and the error goes away

DummyDestruct dummy2; //<- destructor of this object is called!
}

虽然在调试器中它实际上看起来像是在破坏 UnreachableClass,但当我插入 DummyDestruct 对象时,在调用奇怪的析构函数之前它并没有被破坏。所以 LargeObject 的销毁似乎并没有出错。

所有这些都在生产代码中间,很难将它隔离成一个小示例。

我的问题是,是否有人知道造成这种情况的原因以及发生了什么?我有一个功能齐全的调试器可用 (Embarcadero RAD studio),但现在我不确定如何使用它。

谁能给我一些关于如何进行的建议?

更新:

我在 throw 子句下面放置了一个 DummyDestruct 对象,并在析构函数中放置了一个断点。输入了该对象的析构函数(这段代码中只有我们)。

最佳答案

根据您提供的信息,如果一切如您所说,唯一可能的答案是编译器/优化器中的错误。只需添加带有注释的额外范围(再次说明,如果一切都与您所说的完全一样)。

关于c++ - 对象在堆栈上创建之前可以展开吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2326236/

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