该函数f1创建foo和的实例foo.ptr[0] = 2。
#include <iostream>
using namespace std;
class foo {
public:
int *ptr;
inline foo(int a) {
ptr = new int[a];
}
inline ~foo() {
delete[] ptr;
}
};
foo f1() {
foo a(5);
a.ptr[0] = 2;
return a;
}
int main() {
foo a = f1();
cout<<a.ptr[0]<<endl;
return 0;
}
我期望的输出:垃圾值。
f1按值返回,这意味着a制作了一个副本,并且该副本甚至共享它们(a和它的副本)各自ptrs 指向的相同内存位置。
外面f1,a被摧毁。它的析构函数被调用,它将释放ptr内存。这意味着副本ptr指向的内存位置也是无效的。所以,我期望一个垃圾值作为输出。
输出实际上是2.
为什么?