C++ 类成员的动态分配和值
为什么在第二次调用C++ 类成员的动态分配和值,c++,c++11,dynamic-memory-allocation,C++,C++11,Dynamic Memory Allocation,为什么在第二次调用check(base)后,值k发生变化 在delete ptr之后访问ptr指向的内存是 我猜在您的情况下,在调用delete p(又称base)之后, Base*t=newbase在Base用于指向的位置分配内存 class Base{ public: int k=0; virtual void print(){ cout<< k<<endl; } }; Base* check(Base* p){ Bas
check(base)
后,值k
发生变化
在
delete ptr
之后访问ptr
指向的内存是
我猜在您的情况下,在调用delete p
(又称base
)之后,Base*t=newbase
在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