gpt4 book ai didi

c++ - 被破坏的 C++ 对象的数据仍然可以访问吗?

转载 作者:行者123 更新时间:2023-11-30 00:53:59 25 4
gpt4 key购买 nike

<分区>

在以下代码中,getObj() 函数返回对本地对象的引用。这显然非常糟糕,因为对象在函数返回时被销毁(ctor 和 dtor 输出强调对象的生命周期)。正如预期的那样,编译器 (gcc44) 给出了相应的警告。

#include <iostream>

class Blah {

private:
int a_;

public:
Blah(int a) : a_(a) { std::cout << "Constructing...\n"; }
~Blah() { std::cout << "...Destructing\n"; }
void print() { std::cout << a_ << "\n"; }
};

Blah& getObj()
{
Blah blah(3);
return blah; // returning reference to local object
}

int main()
{
Blah& b = getObj();
b.print(); // why does this still output the correct value???

return 0;
}

但是,在明显被破坏的对象上调用 print() 仍然会打印出私有(private)变量 a_ 的正确值。这是输出:

正在构建...
...毁灭
3

这怎么可能?我原以为所有对象数据也会被销毁。

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