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

while overloading new if i delete an object pointer does it also deallocate the memory given dynamically to data members?

#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 values\n";
        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();

    
    

}

在上面的代码中,当我重载 new 和 delete 运算符时,我还动态地将内存分配给数据成员指针“系列”。因此,当我删除对象指针时,是否将内存分配给数据成员指针,即系列这个代码也被释放了?

不,该系列不会被删除,您必须明确删除一个指针。 您可以像这样在析构函数中执行此操作:

~quasar() {
  delete[] series;
}

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

您可能需要先调用 q->display() 然后删除它,否则您将访问一个已删除的对象。