我假定这基本对象:
class Matrix
{
// stuff
private:
size_t _n;
float* _m;
}
构造的部分是一个初始化列表。这是同义的接线:
Matrix(const float* m, size_t n)
{
_n = n;
_m = 0lu;
}
这里是一个很好能解密,你为什么要使用它们:[10.6] Should my constructors use "initialization lists" or "assignment"?
但是,这并不解决您最初的问题:“功能用于初始化内部分配矩阵”
构造函数的作用是复制大小(n)并将指针初始化为NULL。 (NULL与0 [1]同义)所以你需要一些方法来在内部分配并进行初始化。
我有一个Matrix类的问题。通常情况下,矩阵有2维,所以无论是N×N矩阵还是n是元素数,我们都不知道矩阵的维数。我会假设它是N×N矩阵,因为这在计算机图形学中经常使用。
第1步:内部分配
所以,分配一些内存:
_m = new float[n*n];
这可以代替分配为NULL,因为它为什么应该是先设置为NULL,然后更改后的权利。
第二步:初始化
假设调用代码把足够的数据为m
,只需使用memcpy
:
std::memcpy(_m, m, n*n*sizeof(float));
如果你觉得自虐,你也可以复制每一个元素:
for (unsigned int i = 0; i < n*n; i++)
{
_m[i] = m[i];
}
所以你的最终构造函数看起来像这样:
#include <cstring>
Matrix(const float* m, size_t n)
: _n(n), _m(new float[n*n])
{
std::memcpy(_m, m, n*n*sizeof(float));
}
最后,因为你分配的内存,你不应该忘记删除它在析构函数:
Matrix::~Matrix()
{
delete [] _m;
}
注数组删除操作。
[1]在C++ 11和C99这不是在某些情况下完全真实的,但这些都是细节和不相关的。
谢谢,我对“分配”(我想过“对齐”和类似的东西)有点困惑...... –