2

我在类的析构函数中删除类属性时遇到问题,如果我尝试在经典的程序程序中做同样的事情,它可以完美地工作。

但是,如果我尝试执行析构函数下方的代码,则不会delete“数组”并且不会释放内存:

class MyClass
{
private:
    int *array;
    int n = 2000000;
public:
    MyClass(){
        this->array = new int[n];
        for(int i=0; i<n; i++){
            array[i] = i;
        }
    }
    ~MyClass(){
        delete[] array;
    }
};


int main(int argc, const char * argv[])
{
    MyClass *test = new MyClass;

    delete test;

    return 0;
}

为什么?

4

2 回答 2

8

**别担心!**(我应该说_'不要惊慌'_?)

如果delete你的类的析构函数中的语句被执行,构造函数中分配的内存将被释放并可供将来使用。

这并不意味着操作系统为实例化您的类的实际进程分配的内存将会减少。

作为附加提示:要检测程序中的“真实”内存泄漏,请使用Valgrind等合适的工具。

于 2013-06-27T18:42:12.623 回答
3

当您使用 new 或 malloc 分配内存并随后释放它时,这并不一定意味着内存返回给操作系统。该实现可以保留内存,随后对 malloc 或 new 的调用可以利用该内存来避免再次从操作系统分配内存的开销。

于 2013-06-27T18:40:28.353 回答