最終更新日時:
が更新

履歴 編集

function
<hazard_pointer>

std::make_hazard_pointer(C++26)

namespace std {
  hazard_pointer make_hazard_pointer();
}

概要

新しいハザードポインタを構築し、それを所有するhazard_pointerオブジェクトを返す。

効果

ハザードポインタを構築する。

戻り値

新しく構築したハザードポインタを所有するhazard_pointerオブジェクト。

例外

ハザードポインタ用のメモリを確保できなかった場合、std::bad_allocを送出する可能性がある。

#include <hazard_pointer>
#include <atomic>
#include <print>

struct Data : std::hazard_pointer_obj_base<Data> {
  int value;
  explicit Data(int v) : value(v) {}
};

std::atomic<Data*> data{new Data(7)};

int main()
{
  // ハザードポインタを構築する
  std::hazard_pointer h = std::make_hazard_pointer();

  Data* p = h.protect(data);
  std::println("{}", p->value);

  // 後始末: 共有データが指すオブジェクトを回収予約する
  data.load()->retire();
}

出力

7

バージョン

言語

  • C++26

処理系

関連項目

参照