第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