【问题标题】:while overloading new if i delete an object pointer does it also deallocate the memory given dynamically to data members?如果我删除一个对象指针重载new,它是否也会释放动态分配给数据成员的内存?
【发布时间】:2021-08-05 04:09:19
【问题描述】:
#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 运算符时,我还为数据成员指针“系列”动态分配了内存。因此,当我删除对象指针时,分配给数据成员指针的内存,即此代码中的系列也被释放了?

【问题讨论】:

    标签: c++ dynamic-memory-allocation


    【解决方案1】:

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

    ~quasar() {
      delete[] series;
    }
    

    您也可以只将其添加到您的删除操作符delete[] series;,但只有在您使用指向类星体对象的指针时才会将其删除。

    您可能需要先调用 q-&gt;display() 然后将其删除,否则您将访问已删除的对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-05
      • 2021-02-14
      • 2020-10-14
      • 1970-01-01
      • 2017-05-07
      • 2012-11-06
      • 2015-05-16
      • 2017-05-13
      相关资源
      最近更新 更多