c++ delete函数释放内存了吗?

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还存在内存中 该如何释放

delete(p)确实已经释放了p所指向的那块内存,但所谓释放并不是清空,而是把那块内存重新回收到系统中,告诉系统这块内存又可以重新分配了。可以参考格式化和低级格式化的操作效果。
正确的做法是delete完之后还应当将指针置空。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-07-02
delete(p);
只表示p所指向的内存块的所有权,不归p所管了,但是内存里的值还在,
所以你delete完之后,取内存里的值,当然还在。

所以为什么内存释放之后一定要将指针置空,防止野指针出现

正确做法:
delete(p);
p = NULL;
第2个回答  2010-07-02
如果类的对象里没有用new创建的数据成员,那么你就不需要担心类所占的空间 ,因为在这个对象的生命周期结束之后就会自己回收内存
如果是通过new那么 内存是在堆上分配 则使用delete删除类中的用new开辟的数据成员,其他的不用管,自动释放。
第3个回答  2010-07-02
你已经取消了指针,但是指针指向的内存中的数据还在;
delete(p);和没写一样
直接p=NULL;就好了。
第4个回答  2010-07-02
貌似是你的构造函数和析构函数的问题;
照你的代码 我在vc 6.0下 编译不通过,两个错误;
#include <iostream.h>
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;
}

void main()
{
Parent *p=new Parent();
p->setX(5);
cout<<p->getX();
delete(p);
cout<<p->getX();
}
这是改了的代码 可以delete
相似回答