如标题所述,这是我的代码:
class Foo {
public:
Foo (int charSize) {
str = new char[charSize];
}
~Foo () {
delete[] str;
}
private:
char * str;
};
对于这个班级,有什么区别:
int main () {
Foo* foo = new Foo(10);
delete foo;
return 0;
}
和
int main () {
Foo* foo = new Foo(10);
foo->~Foo();
return 0;
}
答案 0 :(得分:11)
调用析构函数会释放该对象拥有的资源,但它不会释放分配给该对象本身的内存。第二个代码段有内存泄漏。
答案 1 :(得分:1)
每当调用析构函数时,都不会释放对象的已分配内存,但程序中不再可以访问该对象。 但删除会从内存中完全删除对象。