Страницы

Поиск по вопросам

вторник, 9 октября 2018 г.

Единожды вызываемая функция

Как при создании объекта класса вызвать функцию, которую в дальнейшем нельзя будет вызывать (ни с помощью данного экземпляра, ни других экземпляров этого класса)?


Ответ

Для этого в C++ есть специальная функция и флаг, делается это так:
std::once_flag flag; //... class Class { Class() { std::call_once(flag, [this]{ SomeMethod(); }); }
void SomeMethod() {...} }
Таким образом мы вызовем SomeMethod() в конструкторе однажды, но это не запретит вызывать этот метод в других местах программы, поэтому его можно сделать приватным, но это не запретит вызов приватного метода в других методах класса. Для того, чтобы полностью исключить повторный вызов какого-либо кода, нужно весь этот код поместить в лямбду, которая передаётся в std::call_once
std::once_flag flag; //... class Class { Class() { std::call_once(flag, [this] { // Тут будет код, который нужно вызывать лишь единожды }); } }

Комментариев нет:

Отправить комментарий