我创建了一个Vector
类,其中包含一个数组(存储在堆中)和一个整数n_rows
,该整数计算数组中的元素数量。为了在实例销毁期间正确删除阵列,我使用了here中所述的delete
。
类(在头文件中):
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]
我的问题: 此资源是否已正确删除? 为什么只是看起来前两个元素被修改了?
答案 0 :(得分:3)
您的析构函数释放了getSearchData(){
this.subscription = this.api.getServerData(this.searchString.toUpperCase()).subscribe((response: any) => {
console.log("back with data :-",response);
}, error => {
if (response.status == 403) {
this.getSearchData();
}else{
console.log("InLine Error : ",response);
this.showAlert('Error', 'Something went wrong. please try again.');
}
});
}
所指向的内存,但对该内存的内容没有任何作用。
取消引用无效的指针(如对vect
进行处理后得到的指针)将导致undefined behavior。只是不要这样做。
答案 1 :(得分:2)
当删除内存时,内存将被释放,但不一定会被覆盖/设置为零或类似的值。访问释放的内存是未定义的行为,并且可能会发生任何事情,但是经常发生的情况(在这种情况下也是如此)是您获得了删除之前的旧值。换句话说,将其删除后,大多只是“标记为可以再次使用”。
程序通常不会浪费时间在已删除的内存上。如果重新分配了内存,则无论如何获取内存都将对其进行初始化,无论如何还是要这样做。