类成员的动态分配和值



为什么在第二次调用check(base)后,值k会发生变化?

class Base{
public:
int k=0;
virtual void print(){
cout<< k<<endl;
}
};
Base* check(Base* p){
Base* t = new Base;
t->k = 4;
delete p;
return t;
}
int main(){
Base* base = new Base;
cout<< check(base)->k; // first call, print 4
cout<<"n";
cout<<base->k;// print 0
check(base); // second call
cout<<"n";
cout<< base->k; // print 4
cout<<"n";
return 0;
}

输出:

4
0
4

访问delete ptrptr指向的内存是 UB

我在你的情况下的猜测是,在你调用delete p(又名base(,
Base* t = new Base分配base指向的内存。

最新更新