14

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

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

2 回答 2

24

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

于 2013-06-04T01:58:55.583 回答
2

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

于 2017-05-03T03:27:13.623 回答