释放内存不就是调用析构函数才可以吗?不调用析构函数怎么释放内存呢[/quote]
谁说释放内存就是调用析构函数,调用析构函数的目的是为了在释放内存前做些处理,比如
class A
{
int a;
int c;
};
class B
{
int b;
A *pA;
B()
{
pA = new A;
}
~B()
{
delete pA;
}
}
如果你new B;申请一块内存,然后你delete后,如果你不在析构函数中delete pA的话,只是释放了B中的int b;A *pA;你申请的pA指向的内存并不会被释放
释放内存不就是调用析构函数才可以吗?不调用析构函数怎么释放内存呢[/quote]
谁说释放内存就是调用析构函数,调用析构函数的目的是为了在释放内存前做些处理,比如
class A
{
int a;
int c;
};
class B
{
int b;
A *pA;
B()
{
pA = new A;
}
~B()
{
delete pA;
}
}
如果你new B;申请一块内存,然后你delete后,如果你不在析构函数中delete pA的话,只是释放了B中的int b;A *pA;你申请的pA指向的内存并不会被释放[/quote]
请问这样理解对吗,析构一个对象,该对象所占内存被释放,只是如果不在析构里面处理,该对象里指针所指对象占的内存还在。我感觉上面的2个朋友说,析构一个对象是销毁对象和释放内存是一个意思吧?你说呢?[/quote]
delete 一个指针,只是释放了本指针指向的堆,并不会释放你的堆中所包含的指针指向的堆,所以需要调用你的析构函数自己去释放,析构函数的作用就是在这里,如果你没有pA = new A这一段的话,有没有析构函数都无所谓。你要好好看一看堆栈方面的只是了。
释放内存不就是调用析构函数才可以吗?不调用析构函数怎么释放内存呢[/quote]
谁说释放内存就是调用析构函数,调用析构函数的目的是为了在释放内存前做些处理,比如
class A
{
int a;
int c;
};
class B
{
int b;
A *pA;
B()
{
pA = new A;
}
~B()
{
delete pA;
}
}
如果你new B;申请一块内存,然后你delete后,如果你不在析构函数中delete pA的话,只是释放了B中的int b;A *pA;你申请的pA指向的内存并不会被释放[/quote]
请问这样理解对吗,析构一个对象,该对象所占内存被释放,只是如果不在析构里面处理,该对象里指针所指对象占的内存还在。我感觉上面的2个朋友说,析构一个对象是销毁对象和释放内存是一个意思吧?你说呢?