首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复制消耗器w/多个指针

复制消耗器w/多个指针
EN

Stack Overflow用户
提问于 2014-10-03 21:40:14
回答 1查看 82关注 0票数 0

我正在尝试为带有指针变量的类创建一个复制构造函数。但是,当我试图访问我的新对象中的指针时,复制构造出现了问题.

代码语言:javascript
复制
/* Copy Constructor */ 
Solver::Solver(const

 Solver &obj)
    {
    // Pointers to use in modified-Midpoint method.
    double *m_yTemp1 = new double[CONST_numVariables];
    double *m_yTemp2 = new double[CONST_numVariables];
    double *m_dTemp  = new double[CONST_numVariables];

    // Triple pointer to store tableau of data for extrapolation.
    double ***m_extrapTableau = new double**[CONST_maxDiv];
    *m_extrapTableau          = *obj.m_extrapTableau;
    for(int i=0; i<CONST_maxDiv; i++)
    {
        m_extrapTableau[i]  = new double*[i+1];
        *m_extrapTableau[i] = *obj.m_extrapTableau[i];
        for(int j=0; j<=i; j++)
        {
            m_extrapTableau[i][j]  = new double[CONST_numVariables];
            *m_extrapTableau[i][j] = *obj.m_extrapTableau[i][j];
        }
    }
    // Pointer of step sizes for extrapolation of modified-Midpoint.
    double *CONST_extrap = new double[CONST_maxDiv];
    for(int i=0; i<CONST_maxDiv; i++)
    {
        CONST_extrap[i] = 2.*(i+1.);
    }

    // Change pointer of new object from already used memory to newly allocated. 
    *m_yTemp1     = *obj.m_yTemp1;
    *m_yTemp2     = *obj.m_yTemp2;
    *m_dTemp      = *obj.m_dTemp;
    *CONST_extrap = *obj.CONST_extrap;
}

我最初的问题是:

  1. 如果类中有其他非指针变量,它们是自动复制的还是也需要指定它们?
  2. 如何处理传递双指针或三指针地址的问题?我想我可能做错了。
  3. 如果CONST_numVariables和CONST_maxDiv是类中设置的常量,那么它们是否可以在此复制构造函数中使用,假设它们是在我复制对象时设置的?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-03 21:50:35

分段故障的问题在于:

代码语言:javascript
复制
double ***m_extrapTableau = new double**[CONST_maxDiv];  // (1)
*m_extrapTableau          = *obj.m_extrapTableau;        // (2) 

在(1)中,将变量m_extrapTableau声明为本地构造函数。

但是在(2)中,我可以看到您有一个同名的类成员。因此,构造函数的本地m_extrapTableau将被正确地简化。但它隐藏了类成员,该类成员将保持未初始化状态以供以后使用。

关于你剩下的问题:

1)如果您实现了一个复制构造函数,您必须负责复制所需的一切。

2)传递双指针或三重指针的入口要求您在使用表的任何元素之前遍历每个级别,正确初始化指针。你应该考虑使用向量向量或矢量向量。这些更容易初始化、复制等.

3)如果它们是const,并且没有使用大括号初始化器将它们初始化为另一个值,那么它们应该是可用的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26187197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档