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