我想實現懶惰初始化在C++中,我正在尋找一種很好的方式來調用Initialize()
成員函數,當其他方法如object->GetName()
得到調用。調用一個對象的「初始化」功能時,其中一個成員函數被調用
眼下如下我已經實現了它:
class Person
{
protected:
bool initialized = false;
std::string name;
void Initialize()
{
name = "My name!"; // do heavy reading from database
initialized = true;
}
public:
std::string GetName()
{
if (!initialized) {
Initialize();
}
return name;
}
};
這不正是我需要暫時。但是爲每種方法設置初始化檢查都非常繁瑣,所以我想擺脫這一點。如果有人知道用C++改進上述示例的一種好方法,我想知道!
例如,當使用->
時,可能可能使用operators
來實現呼叫Initialize()
?
謝謝!
在構造函數中初始化您的對象。 –
@RichardCritten這打破了懶加載的目的。使用延遲加載,因此只有在實際訪問對象時纔會填充對象數據。這就是你使用'initialized'機制的原因。 –
如何在'Initialize'函數中檢查'if(!initialized)'?然後,所有'GetName'函數都要調用'Initialize()'。 –