只是一个简单的问题:
如果我有一个简单的矢量类:
class Vector
{
public:
float x;
float y;
float z;
};
Run Code Online (Sandbox Code Playgroud)
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; }
};
Run Code Online (Sandbox Code Playgroud)
RAII是否应该用于帮助程序员忘记在使用之前初始化值,还是开发人员负责?
或者这是看待RAII的错误方式?
我故意让这个例子变得荒谬可笑.我真正的问题是回答,例如,复合类,如:
class VectorField
{
public:
Vector top;
Vector bottom;
Vector back;
// a lot more!
};
Run Code Online (Sandbox Code Playgroud)
正如你所看到的......如果我必须编写一个构造函数来初始化每一个成员,那就太乏味了.
思考?
RAII中的"R"代表资源.并非一切都是资源.
许多类,例如std :: vector,都是自我初始化的.你不必担心这些.
POD类型不是自我初始化,因此将它们初始化为某些有用的值是有意义的.