C ++分配和析构函数

伊戈尔

我上了这堂课:

int x;
int y;
int **mat;

MyMatrix::MyMatrix(int a, int b)
    :x(a), y(b)
{
    int i ,j;
    mat = new int*[x];
    for (int i = 0; i < x; ++i)
        mat[i] = new int[y];

    for (i = 0; i < x; ++i){
        for (j = 0; j < y; ++j){
            mat[i][j] = i + j;
        }
    }
}

MyMatrix& MyMatrix::add(MyMatrix m){
    int i, j;

    if (x != m.x || y != m.y) return *this;

    for (i = 0; i < x; ++i){
        for (j = 0; j < y; ++j){
            mat[i][j] += m.mat[i][j];
        }
    }

    return *this;
}

MyMatrix::~MyMatrix()
{
    for (int i = 0; i < x; ++i)
        delete[] mat[i];

    delete mat;
}

这是我的主要:

int main(){
    MyMatrix m(2, 3);
    MyMatrix m1(2, 3);

    m.add(m1);

    m.print();
}

一切正常,并打印出正确的答案,但是存在一些分配问题。我正在使用调试器,看到程序在第二次崩溃时两次进入析构函数。

请向我解释问题出在哪里,为什么?

让·巴蒂斯特·尤涅斯(Jean-BaptisteYunès)

是,当您调用m.add参数时,将按值传递它,因此将在方法的入口处构建一个新矩阵,然后在末尾销毁矩阵要消除这种影响,请使用by-ref传递:

MyMatrix& MyMatrix::add(const MyMatrix &m){
...
}

这种方式将原始代码传递到函数中,但是const阻止您在方法执行期间对其进行修改。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C语言中的构造函数和析构函数

来自分类Dev

C ++-析构函数何时调用已使用但未分配的对象?

来自分类Dev

这个C ++析构函数是多余的吗?

来自分类Dev

C ++-在原语上运行析构函数?

来自分类Dev

C ++派生类和虚拟析构函数

来自分类Dev

C ++中的析构函数直接调用

来自分类Dev

没有析构函数的C ++函数

来自分类Dev

C ++放置新功能,继承和析构函数

来自分类Dev

C ++:调用了错误的析构函数

来自分类Dev

根据C ++标准,显式调用构造函数和析构函数是否安全?

来自分类Dev

推入C ++向量时的构造函数和析构函数调用

来自分类Dev

用于堆栈分配对象的C ++虚拟析构函数内联

来自分类Dev

C + +值清除和析构函数?

来自分类Dev

通过构造函数和析构函数实现RAII是否被认为是不好的“现代C ++”?

来自分类Dev

C ++析构函数和所有权

来自分类Dev

C ++析构函数约定

来自分类Dev

C ++转发声明和析构函数

来自分类Dev

[c ++]缺少析构函数

来自分类Dev

C ++析构函数和内存分配以及未定义的行为

来自分类Dev

C ++-析构函数何时调用已使用但未分配的对象?

来自分类Dev

析构函数,还可以为C ++中的特定哈希类分配内存

来自分类Dev

C ++派生类和虚拟析构函数

来自分类Dev

没有析构函数的C ++函数

来自分类Dev

C ++放置新功能,继承和析构函数

来自分类Dev

C ++构造函数/析构函数

来自分类Dev

C ++中的析构函数和构造函数排序

来自分类Dev

使用Eclipse UML插件Papyrus生成C ++构造函数和析构函数

来自分类Dev

C++ 可以使析构函数不调用类成员的析构函数和基类的析构函数吗?

来自分类Dev

c ++复制构造函数和析构函数

Related 相关文章

热门标签

归档