为什么在第二次调用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 ptr
后ptr
指向的内存是 UB
我在你的情况下的猜测是,在你调用delete p
(又名base
(,Base* t = new Base
分配base
指向的内存。