最終更新日時: 2024年06月11日 22時45分38秒 (JST)
Akira Takahashi が更新

履歴 編集

function
<memory>

# std::shared_ptr::unique(C++11)(C++17で非推奨)(C++20で削除)

    bool unique() const noexcept;

この関数は、C++17から非推奨となり、C++20で削除された。代わりに`use_count()`関数を使用すること。

## 概要

同じ所有権を共有する他のユーザーが存在しないかを判定する。

## 戻り値

    use_count() == 1

## 備考

この関数は、`use_count()`を使用するよりも高速である可能性がある。

## 非推奨・削除の詳細

所有権を持つユーザー数を複数スレッドの状況で取得した場合、その値は参考程度にしかならない。そのため、`use_count()`は参考値として使用できるが、この関数は厳密な値を要求してしまう。そのために、複数スレッドで危険なこの関数は非推奨とし、`use_count()`を推奨する。

## 例

    #include <iostream>
    #include <memory>

    int main()
    {
      std::shared_ptr<int> p(new int(3));

      // 所有権を持つユーザーが1人
      if (p.unique()) {
        std::cout << "unique" << std::endl;
      }

      // 所有権を持つユーザーが2人
      std::shared_ptr<int> q = p;
      if (!p.unique()) {
        std::cout << "non unique" << std::endl;
      }
    }

### 出力

    unique
    non unique

## バージョン

### 言語

- C++11

### 処理系

- GCC: 4.4.7 ✅
- Clang: 3.0 ✅
- ICC: ?
- Visual C++: 2008 (TR1) ✅, 2010 ✅, 2012 ✅, 2013 ✅

## 参照

- P0521R0 Proposed Resolution for CA 14 (`shared_ptr use_count`/`unique`)
- P0619R4 Reviewing deprecated facilities of C++17 for C++20