我假定這基本對象:
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這不是在某些情況下完全真實的,但這些都是細節和不相關的。
謝謝,我對「分配」(我想過「對齊」和類似的東西)有點困惑...... –