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 ✅