【发布时间】:2011-12-17 13:57:26
【问题描述】:
我有一个这样的 C++ 类:
class Example {
public:
int getSomeProperty(int id) const;
private:
lazilyLoadSomeData();
}
基本上getSomeProperty() 返回一些已经使用lazilyLoadSomeData() 加载的数据。由于我不想在需要之前加载这些数据,所以我在 getSomeProperty() 中调用此方法
int Example::getSomeProperty(int id) const {
lazilyLoadSomeData(); // Now the data is loaded
return loadedData[id];
}
这不起作用,因为 lazilyLoadSomeData() 不是 const。即使它只更改可变数据成员,编译器也不会允许它。我能想到的唯一两个解决方案是:
在类构造函数中加载数据,但我不想这样做,因为延迟加载所有内容会使应用程序更快。
将
lazilyLoadSomeData()设为常量。它会起作用,因为它只更改可变成员,但它似乎并不正确,因为从名称来看,该方法显然正在加载某些内容并且显然正在进行一些更改。
关于什么是处理这个问题的正确方法有什么建议,而不必欺骗编译器(或完全放弃 const 正确性)?
【问题讨论】:
-
¤ 这就是
mutable关键字的用途。更倾向于“作弊”方向的另一种选择是保留指向数据的指针。我提到这一点是为了明确识别反模式并避免它;对惰性数据使用mutable。干杯&hth.,
标签: c++ const-correctness