std::shared_ptr<T>::use_count
提供: cppreference.com
<tbody>
</tbody>
long use_count() const noexcept; |
||
現在のオブジェクトを管理している shared_ptr インスタンスの数 (this を含む) を返します。 管理しているオブジェクトがなければ、 0 が返されます。
マルチスレッド環境では、 use_count によって返される値は概算です (一般的な実装では memory_order_relaxed なロードが使用されます)。
引数
(なし)
戻り値
現在のオブジェクトを管理している shared_ptr インスタンスの数、または管理しているオブジェクトがなければ 0。
ノート
一般的なユースケースは以下の通りです。
0と比較する。use_countが 0 を返す場合、その shared_ptr は空であり、管理しているオブジェクトはありません (格納されているポインタがヌルかどうかに関わらず)。 マルチスレッド環境では、これは管理対象オブジェクトの破棄が完了したことを暗黙に意味するわけではありません。1と比較する。use_countが 1 を返す場合、他の所有者はいません。 (このユースケースのためにメンバ関数 unique() が提供されていましたが、非推奨になりました。) マルチスレッド環境では、これはオブジェクトを変更しても安全だということを暗黙に意味するわけではありません。 以前の共有所有者による管理対象オブジェクトへのアクセスが完了していないかもしれませんし、 std::weak_ptr::lock などによって新たな共有所有者が並行的に出現するかもしれないためです。
例
Run this code
#include <memory>
#include <iostream>
void fun(std::shared_ptr<int> sp)
{
std::cout << "fun: sp.use_count() == " << sp.use_count() << '\n';
}
int main()
{
auto sp1 = std::make_shared<int>(5);
std::cout << "sp1.use_count() == " << sp1.use_count() << '\n';
fun(sp1);
}
出力:
sp1.use_count() == 1
fun: sp.use_count() == 2
関連項目
(C++20未満) |
管理対象オブジェクトが現在の shared_ptr インスタンスによってのみ管理されているかどうか調べます (パブリックメンバ関数) |