- memory[meta header]
- std[meta namespace]
- shared_ptr[meta class]
- function[meta id-type]
- cpp11[meta cpp]
- cpp17deprecated[meta cpp]
- cpp20removed[meta cpp]
bool unique() const noexcept;
この関数は、C++17から非推奨となり、C++20で削除された。代わりにuse_count()
関数を使用すること。
有効なリソースを所有しているかを判定する。
use_count() == 1
- get()[link get.md]
この関数は、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()[color ff0000]
unique
non unique
- C++11
- GCC: 4.4.7
- Clang libc++, C++11 mode: 3.0
- ICC: ?
- Visual C++: 2008 (TR1), 2010, 2012, 2013