好好生活@ 2022-07-25 01:17 采纳率: 0%
浏览 59

C++构造函数调用的问题

问题遇到的现象和发生背景

请问各位朋友们,为什么我的析构函数只调用1次呢,A,B应该各一次才对,用的是DEV++

问题相关代码,请勿粘贴截图
#include<iostream>
using namespace std;

class Array2 {
    
    private:
        int r;
        int c;
        int **array;
    public:
        Array2 (){
        }
        Array2 (int row,int colume);  //在外面写函数主体的时候,不用加{},直接加: 
        ~Array2()
        {
            if(array)
            {
                cout<<"deconstructor called!"<<endl;
                for(int i=0;i<r;++i)
                {
                    delete [] array[i];
                }
                delete [] array;
                                
            } 
    
        }
        int * operator [] (int & i);
        int & operator () (int & i,int & j); 
        Array2 & operator = ( Array2 & ar);

        void setR(int row){
            r=row;
        }
        void setC(int colume){
            c=colume;
        }
                
        int getR()    {
            return r;
        }
        int getC()    {
            return c;
        }
        int** getArray()    {
            return array;
        }                            
};

Array2 & Array2::  operator = ( Array2 & ar){   //这里是构造函数(复制构造函数),不是赋值函数,要像构造函数那样写 
    //Array2 a1(ar.getR(),ar.getC());
    //return a1;
    r=ar.getC();
    c=ar.getR();
    array=ar.getArray();
    return *this;    
}

int & Array2:: operator () (int & i,int & j){
    return array[i][j];
}    

int *  Array2:: operator [] (int & i){
    //return a[i];
    return array[i];
}


Array2:: Array2(int row,int colume ):r(row),c(colume)
{    

    array=new int*[r];
    for(int i=0;i<r;i++){
        array[i]=new int[c];
    }
}

int main()
{
    Array2 a(3,4);
    int i,j;
    for(i=0;i<3;++i)
    {
        for(j=0;j<4;j++)
        {
            a[i][j]=i*4+j;
        }
    }
    for(i=0;i<3;++i)
    {
        for(j=0;j<4;++j)
            cout<<a(i,j)<<",";
        cout<<endl;
    }
    cout<<"next"<<endl;    

    Array2 b; 
    b=a;
    for(i=0;i<3;++i)
    {
        for(j=0;j<4;++j)
            cout<<b(i,j)<<",";
    cout<<endl;
    }    
    return 0;    
}

运行结果及报错内容

img

  • 写回答

2条回答 默认 最新

  • 叶落秋白 后端领域优质创作者 2022-07-25 07:37
    关注

    你的主函数不就创建了一次对象吗

    评论

报告相同问题?

问题事件

  • 创建了问题 7月25日

悬赏问题

  • ¥15 服务器清除BIOS之后引导不了
  • ¥15 CPLEX用OPL编写的混合整数线性优化问题。
  • ¥15 可以用EasyConnect连接实验室内网,但无法连接内网才能访问的服务器,为什么?
  • ¥15 前端预览docx文件,文件从后端传送过来。
  • ¥15 层次聚类和蛋白质相似度
  • ¥25 主成分分析中的第一第二主成分分别代表哪些参数
  • ¥15 oracle数据库查询语句问题
  • ¥15 有没有c++绘制算法的佬们吗救孩一下
  • ¥15 android 蓝牙闪退
  • ¥15 绝缘子污秽comsol仿真参数