class MyObj{
public:
void myFunc(){
//ToBeExecutedJustOnce
}
};
У меня есть функция, которую я хочу исполнять только один раз для времени жизни MyObj
. Может быть много экземпляров MyObj
, и каждый из них должен иметь возможность выполнить эту функцию один раз. Поэтому, если у меня есть:
MyObj first;
MyObj second;
MyObj third:
first.myFunc(); // Should execute
second.myFunc(); // Should execute
third.myFunc(); // Should execute
first.myFunc(); // Should not execute
second.myFunc(); // Should not execute
third.myFunc(); // Should not execute
Параметры:
- переменная-член: если я использую переменную-член, то другие функции внутри
MyObj
могут получить к ней доступ и изменить ее. - глобальная статическая переменная: не может работать, потому что первая, вторая и третья все будут проверять одну и ту же переменную.
- local static: та же проблема, что и # 2.
Единственное решение, которое я нашел, состоит в том, чтобы наследовать MyObj
от другого класса
MyOtherObj{
private:
bool _isInit = false;
public:
bool isInit(){
bool ret = true;
if (!_isInit){
ret = false;
_isInit = true;
}
return ret;
}
};
class MyObj : public MyOtherObj {
public:
void MyFunc(){
if (!isInit()){
//Do stuff...
}
}
};
Любое лучшее предложение?
EDIT: я не забочусь о безопасности потоков!
EDIT: я не хочу выполнять метод в конструкторе просто потому, что этот метод, возможно, потребуется выполнить намного позже в течение жизни объекта....