簡単な質問:
単純なベクトル クラスがある場合:
class Vector
{
public:
float x;
float y;
float z;
};
RAII の概念はここにも当てはまりますか? つまり、すべての値をいくつかの値に初期化するコンストラクターを提供します (初期化されていない値が使用されるのを防ぐため)。
EDITまたは、オブジェクトを難読化する前にメンバー変数を初期化するようユーザーに明示的に要求するコンストラクターを提供します。
すなわち
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!
};
ご覧のとおり...すべてのメンバーを初期化するためにコンストラクターを作成する必要がある場合、それは非常に面倒です。
考え?