在RAII中,资源在被访问之前不会被初始化。但是,许多访问方法被声明为常量。我需要调用mutable
(非常量)函数来初始化数据成员。
示例:从数据库加载
struct MyClass
{
int get_value(void) const;
private:
void load_from_database(void); // Loads the data member from database.
int m_value;
};
int
MyClass ::
get_value(void) const
{
static bool value_initialized(false);
if (!value_initialized)
{
// The compiler complains about this call because
// the method is non-const and called from a const
// method.
load_from_database();
}
return m_value;
}
我的原始解决方案是将数据成员声明为mutable
. 我宁愿不这样做,因为它表明其他方法可以更改成员。
我将如何load_from_database()
转换语句以消除编译器错误?