在重载new时,如果我删除一个对象指针,它是否也会释放动态分配给数据成员的内存


#include<iostream>
#include<stdlib.h>
using namespace std;
class quasar{
int quark;
int *series;

public:
quasar(){
quark=0;

}
quasar(int a){
quark=a;
}
void *operator new(size_t){
quasar*p;
p=(quasar*)malloc(sizeof(quasar));
p->series=new int[5];


return p;



}
void operator delete(void *n){

free(n);

}
void  input(){
cout<<"enter your valuesn";
for(int i=0;i<5;i++){
cin>>series[i];
}
}
void display(){
for(int i=0;i<5;i++){
cout<<series[i];
}
}
};
int main(){
quasar *q=new quasar;
q->input();
q->display();
cout<<endl;
delete q;
q->display();


}

在上面的代码中,当我重载新的和删除的运算符时;"系列";。那么,当我删除对象指针时,分配给数据成员指针的内存(即该代码中的序列(是否也会被释放?

不,序列不会被删除,您必须显式删除指针。你可以在这样的析构函数中做到这一点:

~quasar() {
delete[] series;
}

您也只能将其添加到删除运算符delete[] series;中,但只有当您使用类星体对象的指针时,它才会被删除。

您可能想先调用q->display(),然后将其删除,或者您将访问一个已删除的对象。

相关内容

  • 没有找到相关文章

最新更新