名稱空間
變體
操作

std::shared_ptr<T>::use_count

來自 cppreference.com
 
 
記憶體管理庫
(僅作說明*)
未初始化記憶體演算法
(C++17)
(C++17)
(C++17)
受約束的未初始化
記憶體演算法
C 庫

分配器
記憶體資源
垃圾回收支援
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
未初始化儲存
(直到 C++20*)
(直到 C++20*)
顯式生命週期管理
 
 
long use_count() const noexcept;

返回管理當前物件的不同 shared_ptr 例項(包含 *this)的數量。若無被管理的物件,則返回 0

在多執行緒環境中,use_count 原子地獲取例項數量(典型實現使用 memory_order_relaxed 載入)。

目錄

[編輯] 引數

(無)

[編輯] 返回值

管理當前物件的 std::shared_ptr 例項的數量,若無被管理的物件則為 0

[編輯] 注意

常見用例包括

  • 0 比較。若 use_count 返回零,則共享指標是空的且不管理物件(不論其儲存的指標是否為 nullptr)。
  • 1 比較。若 use_count 返回 1,則沒有其他所有者。為該用例提供了(C++17 起)已棄用的 成員函式 unique()(C++20 前)

在多執行緒環境中

use_count 返回的值應被認為是近似值,因為在原子地獲取該值和有意義地使用該值之間,共享所有者的數量可能在其他執行緒中發生變化。當 use_count 返回 1 時,並不意味著該物件可以安全地修改,因為先前共享所有者對被管理物件的訪問可能尚未完成,而且新的共享所有者可能被併發地引入,例如透過 std::weak_ptr::lock。只有當 use_count 返回 0 時,該計數才是準確的。

[編輯] 示例

#include <iostream>
#include <memory>
 
void fun(std::shared_ptr<int> sp)
{
    std::cout << "in fun(): sp.use_count() == " << sp.use_count()
              << " (object @ " << sp << ")\n";
}
 
int main()
{
    auto sp1 = std::make_shared<int>(5);
    std::cout << "in main(): sp1.use_count() == " << sp1.use_count()
              << " (object @ " << sp1 << ")\n";
 
    fun(sp1);
}

可能的輸出

in main(): sp1.use_count() == 1 (object @ 0x20eec30)
in fun(): sp.use_count() == 2 (object @ 0x20eec30)

[編輯] 參閱

(C++20 前)
檢查管理物件是否僅由當前的 shared_ptr 物件管理
(公開成員函式) [編輯]