[C++] call_onceを使ってある処理を一回だけ実行する

初期化処理などある処理を一度だけ呼び出して以降は呼び出さなくするやり方

以下の例ではSomeFunc()という関数の呼び出しの際に最初の一度だけinit()という関数を呼び出したい場合の例です。

#include <iostream>
#include <mutex>

void init (const int num) {
    
    std::cout << "init(" << std::to_string(num) << ") called" << std::endl;
}

void SomeFunc() {
    
    static std::once_flag flag;
    std::call_once(flag, init, 10);

    std::cout << "SomeFunc() called" << std::endl;
}

int main() {
    
    SomeFunc();
    SomeFunc();
    SomeFunc();    
}

SomeFunc() 関数にstaticな変数flagを持たせて、call_onceでinit()関数を呼び出すかどうかのチェックをしています。
実行結果は以下の通り

init(10) called
SomeFunc() called
SomeFunc() called
SomeFunc() called

SomeFunc()は3回呼ばれていますが、SomeFunc()の中でcall_once()経由で呼び出されるinit()は一度しか呼び出されていないのが分かります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です