class 成员的动态分配和价值
dynamic allocation and value of the class member
为什么值 k
在第二次调用 check(base)
后发生变化?
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
(a.k.a. base
),
Base* t = new Base
在 base
用来指向的地方分配内存。
为什么值 k
在第二次调用 check(base)
后发生变化?
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
(a.k.a. base
),
Base* t = new Base
在 base
用来指向的地方分配内存。