C++ 具有非默认构造函数的多重继承的内存分配

C++ 具有非默认构造函数的多重继承的内存分配,c++,multiple-inheritance,diamond-problem,C++,Multiple Inheritance,Diamond Problem,我正在努力理解多重继承。显然,我选择了解决一个非常复杂的问题,即多重继承和钻石问题。即使我发现了一些与我的问题类似的情况,例如,我的问题更多的是关于内存而不是执行顺序 假设我有以下几点: class Matrix { public: Matrix(int rows, int Cols) { // Build matrix of zeros } }; class Symmetric : public virtual Matrix { public: // It's enoug

我正在努力理解多重继承。显然,我选择了解决一个非常复杂的问题,即多重继承和钻石问题。即使我发现了一些与我的问题类似的情况,例如,我的问题更多的是关于内存而不是执行顺序

假设我有以下几点:

class Matrix {
public:
  Matrix(int rows, int Cols) {
    // Build matrix of zeros
  }
};

class Symmetric : public virtual Matrix {
public:
  // It's enough to call Matrix constructor using the same number of rows and cols
  Symmetric(int size) : Matrix(size, size) {}
};

class PosDef : public virtual Matrix {
public:
  // We need different constructor, matrix of zeros is not pos def
  PosDef(int size) {
    // Build matrix of ones
  }
};

class SymmPosDef : public Symmetric, public PosDef {
public:
  // We basically want to use the PosDef constructor that gives symmetric matrix
  SymmPosDef(int size) : Matrix(size, size), Symmetric(size), PosDef(size) {}
};
因为我已经给了非默认构造函数初始化
SymmPosDef
对象的唯一方法是使用复杂的链
SymmPosDef(int-size):矩阵(size,size),对称(size),PosDef(size){}
,我的问题是我要构建多少个矩阵

我是否为
矩阵
分配了一次空间,为
对称
分配了一次空间(这将是相同的零元素),为
PosDef
分配了一次空间,还是重复使用相同的空间


因为矩阵的大小可能很大,所以我想做尽可能少的工作。

Matrix
在最派生的类中仅初始化一次(从initializer列表中)。 但是将调用所有构造函数body

与:

你应该:

  • 矩阵(大小、大小)
  • 对称(int-size):矩阵(size,size)
    跳过)
  • 对称(整数大小)
    正文(
    /*空*/
  • PosDef(int-size):跳过矩阵(size,size
  • PosDef(int-size)
    body(
    /*构建一个矩阵*/
  • SymmPosDef(int size)
    body(
    /*Empty*/

不要使用多重继承。@你对处理对称性和正定性的关系有什么建议吗?我会说是自由函数和组合。首先看看简单继承在你的例子中已经是错误的了。
class SymmPosDef : public Symmetric, public PosDef {
public:
  SymmPosDef(int size) : Matrix(size, size), Symmetric(size), PosDef(size) {}
};