最終更新日時: 2026年02月25日 13時06分35秒 (JST)
Akira Takahashi が更新

履歴 編集

function
<memory>

# std::shared_ptr::owner_hash(C++26)

    size_t owner_hash() const noexcept; // (1) C++26

## 概要

所有権ベースでのハッシュ値を取得する。

## 戻り値

所有権が等価な（`owner_equal()`が`true`を返す）`shared_ptr`および`weak_ptr`オブジェクトに対して、同じハッシュ値を返す。

## 備考

この関数は、所有権ベースでのハッシュを提供する。`std::hash<shared_ptr<T>>`が保持するポインタの値をもとにしたハッシュを提供するのに対し、`owner_hash()`は所有権（参照カウンタオブジェクト）をもとにしたハッシュを提供する。

これにより、`owner_equal`と組み合わせて、`shared_ptr`や`weak_ptr`を`unordered_map`や`unordered_set`のキーとして使用できる。

## 例

    #include <iostream>
    #include <memory>

    int main()
    {
      std::shared_ptr<int> org(new int(42));

      // 別名コンストラクタで異なるポインタを指すが、所有権は同じ
      std::shared_ptr<int> alias(org, org.get());

      std::cout << std::boolalpha;
      std::cout << (org.owner_hash() == alias.owner_hash()) << std::endl;
    }

### 出力

    true

## バージョン

### 言語

- C++26

### 処理系

- Clang: 22 ✅
- GCC: 16 ✅
- Visual C++: 2026 Update 2 ❌

## 関連項目

- `owner_equal()`
- `std::owner_hash`
- `owner_before()`

## 参照

- P1901R2 Enabling the Use of `weak_ptr` as Keys in Unordered Associative Containers