在C ++中删除和调用析构函数有什么区别

时间:2013-06-04 01:56:29

标签: c++ memory-management destructor

如标题所述,这是我的代码:

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;
}

2 个答案:

答案 0 :(得分:11)

调用析构函数会释放该对象拥有的资源,但它不会释放分配给该对象本身的内存。第二个代码段有内存泄漏。

答案 1 :(得分:1)

每当调用析构函数时,都不会释放对象的已分配内存,但程序中不再可以访问该对象。 但删除会从内存中完全删除对象。