class Parent{public:Parent();~Parent();void setX(int x);int getX();private:int x;};void Parent::setX(int x){this->x=x;}int Parent::getX(){return this->x;}一个很普通的类 然后mian函数我调用的时候结果很让我费解Parent *p=new Parent();p->setX(5);cout<<p->getX();delete(p);cout<<p->getX();结果输出了 2个5 我以为会报错的 . delete没有把 x 的内存释放掉为什么?为什么 x还存在内存中 该如何释放
4 回答
慕桂英3389331
TA贡献2036条经验 获得超8个赞
delete(p);
只表示p所指向的内存块的所有权,不归p所管了,但是内存里的值还在,
所以你delete完之后,取内存里的值,当然还在。
所以为什么内存释放之后一定要将指针置空,防止野指针出现
正确做法:
delete(p);
p = NULL;
神不在的星期二
TA贡献1963条经验 获得超6个赞
如果类的对象里没有用new创建的数据成员,那么你就不需要担心类所占的空间 ,因为在这个对象的生命周期结束之后就会自己回收内存
如果是通过new那么 内存是在堆上分配 则使用delete删除类中的用new开辟的数据成员,其他的不用管,自动释放。
- 4 回答
- 0 关注
- 1588 浏览
添加回答
举报
0/150
提交
取消