只是一個簡單的問題:RAII和未初始化值
,如果我有一個簡單的載體類:
class Vector
{
public:
float x;
float y;
float z;
};
犯規的RAII的概念應用在這裏呢?即提供一個構造函數將所有值初始化爲某些值(以防止使用未初始化的值)。
編輯或提供一個構造函數,明確要求用戶在實例化對象之前初始化成員變量。
即
class Vector
{
public:
float x;
float y;
float z;
public:
Vector(float x_, float y_, float z_)
: x(x_), y(y_), z(z_)
{ // Code to check pre-condition; }
};
應該RAII被用來幫助程序員忘記使用數據之前初始化值,或者是開發商的責任?
或者是看RAII的錯誤方式?
我故意讓這個例子很簡單。我真正的問題是回答,例如,複合材料類,如:
class VectorField
{
public:
Vector top;
Vector bottom;
Vector back;
// a lot more!
};
正如你所看到的......如果我不得不寫一個構造函數初始化每一個成員,這是相當繁瑣的。
想法?
如果值是未初始化的,那麼我不認爲這是恰當的說編譯器生成的構造函數具有「將這些值設置爲默認值」。它沒有把它們設置爲任何東西;這就是爲什麼他們未初始化。 – 2009-04-24 02:56:27