最終更新日時:
が更新

履歴 編集

function
<memory>

std::shared_ptr::unique(C++11)(C++17で非推奨)

bool unique() const noexcept;

この関数は、C++17から非推奨となった。代わりに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

処理系

参照