如何清除动态分配的内存,这是在堆中?

Pea*_*Gen -3 c++ pointers destructor visual-studio-2010

请查看以下代码

#include <iostream>

using namespace std;

class Memory
{
private:
    int *memory;

public:
    Memory()
    {
        memory = new int[3];

        for(int i=0;i<3;i++)
        {
            memory[i] = i;
            cout << memory[i] << endl;
        }
    }

    ~Memory()
    {
        delete[] memory;
    }
};

int main()
{
    cout << "Running" << endl;

    Memory m;
    // do I have to invoke ~Memory() ?

    int *secondMemory = new int[5];
    //How to clear the memory of 'secondMemory' ?

    system("pause");
    return 0;


}
Run Code Online (Sandbox Code Playgroud)

在这里,我已经清除memory了类的析构函数中动态分配的数组的内存.但我的问题是

  1. 我必须调用~Memory()吗?
  2. 如何清除'secondMemory'的记忆?

这些问题在代码的适当位置作为注释询问.请帮忙!

编辑

这里的问题是,如果我在main()中删除'secondMemory'的内存,那么一旦分配内存就会消失!

And*_*owl 8

我必须调用~Memory()吗?

不,具有自动存储持续时间(如m)的对象在超出范围时会被销毁.换句话说,析构函数由系统自动调用.在这种情况下,mmain()函数返回时会被销毁.

如何清除'secondMemory'的记忆?

分配的每个对象new必须通过相应的调用来销毁delete,并且每个分配的数组new[]必须通过相应的调用来销毁delete[]:

delete[] secondMemory;
Run Code Online (Sandbox Code Playgroud)

如果不这样做会导致内存泄漏.

但是,请记住,使用原始指针执行手动内存管理在Modern C++中被认为是一种糟糕的编程习惯.而是std::vector<>尽可能地使用标准容器.