(Assumindo um ambiente de thread único)
Uma função que atende a esse critério é:
bool MyClass::is_initialized = false;
void MyClass::lazy_initialize()
{
if (!is_initialized)
{
initialize(); //Should not be called multiple times
is_initialized = true;
}
}
Em essência, eu posso chamar essa função várias vezes e não me preocupar em inicializar MyClass
várias vezes
Uma função que não atende a esse critério pode ser:
Foo* MyClass::ptr = NULL;
void initialize()
{
ptr = new Foo();
}
Ligar initialize()
várias vezes causará um vazamento de memória
Motivação
Seria bom ter uma única palavra concisa para descrever esse comportamento, para que as funções que devem atender a esse critério possam ser devidamente comentadas (especialmente útil ao descrever as funções da interface que devem ser substituídas)