gpt4 book ai didi

c++ - 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?

转载 作者:行者123 更新时间:2023-11-30 02:18:02 27 4
gpt4 key购买 nike

我在阅读有关如何在 C++ 中分配内存时遇到了一些代码。但是我不明白为什么两个 ValueHolder 指针 (x, y) 指向同一个地址。代码的真正含义是什么?

struct ValueHolder{
int value;
operator ValueHolder* () { return this; } // just typecast
};

void objects_stored_by_pointers_with_autocleanup() {
ValueHolder * x = ValueHolder();
ValueHolder * y = ValueHolder();
x->value = 7;
y->value = 9;
printf("%d\n", x->value);
printf("%d\n", y->value);
printf("%p\n", (ValueHolder*)x);
printf("%p\n", (ValueHolder*)y);
}
int main(int argc, char* argv[]){
objects_stored_by_pointers_with_autocleanup();
}

预期结果:

7
9
0x55afde2aae70
0x55afde2aae90

实际结果:

9
9
0x7ffeb6d8fcf4
0x7ffeb6d8fcf4

最佳答案

What does the code really mean?

ValueHolder() 创建一个临时对象,在完整表达式销毁后,占用的内存也被释放。在那之后,指针 xy 立即悬空,对它们的任何取消引用,如 x->valuey->value 导致 UB。

在您的情况下,第二个临时对象似乎与第一个已被销毁的对象获得相同的地址,这很好,但请注意不能保证。

关于c++ - 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52791473/

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