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
body(PosDef(int-size)
)/*构建一个矩阵*/
body(SymmPosDef(int size)
)/*Empty*/
class SymmPosDef : public Symmetric, public PosDef {
public:
SymmPosDef(int size) : Matrix(size, size), Symmetric(size), PosDef(size) {}
};