删除[]后剩余的堆数组的剩余元素

Remaning elements of a heap array remaining after delete []

我创建了一个 Vector class 包含一个数组(存储在堆中)和一个整数 n_rows 来计算数组中元素的数量。为了在实例销毁期间正确删除数组,我按照 .

的解释使用了 delete

Class(在头文件中):

private:
    int n_rows;
    int* vect;

public:
    Vector(int);
    ~Vector();
    std::string toString(); // returns elements from vect

析构函数(在 .cpp 中):

Vector::~Vector(){
    delete [] this->vect;
    cout << this->toString() << endl;
}

但是,如果我在删除后打印数组 vect,似乎只有前两个条目被删除。

示例:

// Vector:
[2 2 2 2 2 2]

// Destruction
[0 0 2 2 2 2]

我的问题: 此资源是否已正确删除? 为什么只显示前两个元素被修改了?

内存在删除时释放,但不一定overwritten/set为零或类似的东西。访问释放的内存是 未定义的行为 并且任何事情都可能发生,但经常发生(并且在这种情况下发生)的是您获得了删除之前存在的旧值。也就是说,删除的时候,多半只是"marked for being available again".

程序通常不会浪费时间覆盖已删除的内存。如果重新分配内存,那么获取内存的任何东西很可能会根据需要对其进行初始化。

您的析构函数释放 vect 指向的内存,但它不会对该内存的 内容 做任何事情。

取消对无效指针的引用(就像您在对其执行 delete[] 后得到的指针)会导致 undefined behavior。只是不要这样做。