名前空間
変種
操作

std::weak_ptr::expired

提供: cppreference.com
< cpp‎ | memory‎ | weak ptr
 
 
 
動的メモリ管理
未初期化記憶域
(C++17)
ガベージコレクションサポート
その他
(C++20)
(C++11)
(C++11)
C のライブラリ
低水準のメモリ管理
 
 
bool expired() const noexcept;
(C++11およびそれ以降)

use_count() == 0 と同等です。 管理対象オブジェクトのデストラクタはまだ呼ばれていないかもしれませんが、そのオブジェクトの破棄は目前に迫っています (またはすでに起きたかもしれません)。

目次

[編集] 引数

(なし)

[編集] 戻り値

管理対象オブジェクトがすでに削除されていれば true、そうでなければ false

[編集] ノート

管理対象オブジェクトが複数のスレッド間で共有されている場合、この関数は本質的に競合しがちです。 特に、 false の結果は、それが使用できる前に古くなるかもしれません。 true の結果は信頼できます。

[編集]

どのように expired を使用してポインタの有効性を調べるかをデモンストレーションします。

#include <iostream>
#include <memory>
 
std::weak_ptr<int> gw;
 
void f()
{
    if (!gw.expired()) {
	std::cout << "gw is valid\n";
    }
    else {
        std::cout << "gw is expired\n";
    }
}
 
int main()
{
    {
        auto sp = std::make_shared<int>(42);
	gw = sp;
 
	f();
    }
 
    f();
}

出力:

gw is valid
gw is expired


[編集] 関連項目

参照先のオブジェクトを管理する shared_ptr を作成します
(パブリックメンバ関数) [edit]
オブジェクトを管理している shared_ptr オブジェクトの数を返します
(パブリックメンバ関数) [edit]