该函数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
和它的副本)各自ptr
s 指向的相同内存位置。
外面f1
,a
被摧毁。它的析构函数被调用,它将释放ptr
内存。这意味着副本ptr
指向的内存位置也是无效的。所以,我期望一个垃圾值作为输出。
输出实际上是2
.
为什么?