std::bad_weak_ptr
From cppreference.com
| ヘッダ <memory> で定義 |
||
| class bad_weak_ptr; |
(C++11以降) | |
std::bad_weak_ptr は、std::weak_ptr が既に削除されたオブジェクトを参照している場合に、std::weak_ptr を引数に取る std::shared_ptr のコンストラクタによって例外としてスローされるオブジェクトの型です。
継承図
目次 |
[編集] メンバー関数
| (コンストラクタ) |
新しい bad_weak_ptr オブジェクトを構築します。(public member function) |
| operator= |
bad_weak_ptr オブジェクトを置き換えます。(public member function) |
| what |
説明文字列を返す (public member function) |
std::bad_weak_ptr::bad_weak_ptr
| bad_weak_ptr() noexcept; |
(1) | (C++11以降) |
| bad_weak_ptr( const bad_weak_ptr& other ) noexcept; |
(2) | (C++11以降) |
実装定義のヌル終端バイト文字列を持つ新しい bad_weak_ptr オブジェクトを構築します。この文字列は what() 経由でアクセス可能です。
1) デフォルトコンストラクタ。
2) コピーコンストラクタ。 *this と other が両方とも動的型
std::bad_weak_ptr である場合、std::strcmp(what(), other.what()) == 0 となります。パラメータ
| その他 | - | コピーする別の例外オブジェクト |
std::bad_weak_ptr::operator=
| bad_weak_ptr& operator=( const bad_weak_ptr& other ) noexcept; |
(C++11以降) | |
other の内容を代入します。 *this と other が両方とも動的型 std::bad_weak_ptr である場合、代入後には std::strcmp(what(), other.what()) == 0 となります。
パラメータ
| その他 | - | 割り当てる別の例外オブジェクト |
戻り値
*this
std::bad_weak_ptr::what
virtual const char* what() const noexcept; |
(C++11以降) | |
説明文字列を返します。
戻り値
説明情報を含む、実装定義のヌル終端文字列へのポインタ。この文字列は std::wstring として変換および表示するのに適しています。このポインタは、それが取得された例外オブジェクトが破棄されるか、例外オブジェクトの非 const メンバー関数(例:コピー代入演算子)が呼び出されるまで、少なくとも有効であることが保証されます。
|
返された文字列は、定数評価中に通常のリテラルエンコーディングでエンコードされます。 |
(C++26以降) |
注釈
実装は what() をオーバーライドすることが許可されていますが、必須ではありません。
std::exception から継承
メンバ関数
| [virtual] |
例外オブジェクトを破棄する ( std::exception の仮想 public メンバー関数) |
| [virtual] |
説明文字列を返す ( std::exception の仮想 public メンバー関数) |
[編集] 例
このコードを実行
#include <iostream> #include <memory> int main() { std::shared_ptr<int> p1(new int(42)); std::weak_ptr<int> wp(p1); p1.reset(); try { std::shared_ptr<int> p2(wp); } catch (const std::bad_weak_ptr& e) { std::cout << e.what() << '\n'; } }
実行結果の例
std::bad_weak_ptr
[編集] 欠陥報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 2376 | C++11 | デフォルト構築された bad_weak_ptr の what の呼び出しは、"bad_weak_ptr" を返すことが要求されていました。 |
戻り値は実装定義です。 |
[編集] 関連項目
| (C++11) |
オブジェクトの所有権を共有するセマンティクスを持つスマートポインタ (クラステンプレート) |
| (C++11) |
std::shared_ptr によって管理されるオブジェクトへの弱い参照 (クラステンプレート) |