名前空間
変種
操作

std::shared_ptr::operator=

提供: cppreference.com
< cpp‎ | memory‎ | shared ptr
 
 
 
動的メモリ管理
未初期化記憶域
(C++17)
ガベージコレクションサポート
その他
(C++20)
(C++11)
(C++11)
C のライブラリ
低水準のメモリ管理
 
 
shared_ptr& operator=( const shared_ptr& r ) noexcept;
(1)
template< class Y >
shared_ptr& operator=( const shared_ptr<Y>& r ) noexcept;
(1)
shared_ptr& operator=( shared_ptr&& r ) noexcept;
(2)
template< class Y >
shared_ptr& operator=( shared_ptr<Y>&& r ) noexcept;
(2)
template< class Y >
shared_ptr& operator=( std::auto_ptr<Y>&& r );
(3) (C++11で非推奨)
(C++17で削除)
template< class Y, class Deleter >
shared_ptr& operator=( std::unique_ptr<Y,Deleter>&& r );
(4)

管理対象オブジェクトを r によって管理されているものに置き換えます。

*this がすでにオブジェクトを所有していて、それがそのオブジェクトを所有する最後の shared_ptr であり、 r*this と同じでない場合、そのオブジェクトは所有するデリータを通して破棄されます。

1) r によって管理されているオブジェクトの所有権を共有します。 r がオブジェクトを管理していない場合は *this もオブジェクトを管理しません。 shared_ptr<T>(r).swap(*this) と同等です。

2) shared_ptrr からムーブ代入します。 代入後、 *thisr の以前の状態のコピーを格納し、 r は空になります。 shared_ptr<T>(std::move(r)).swap(*this) と同等です。

3) r によって管理されているオブジェクトの所有権を *this に転送します。 r がオブジェクトを管理していない場合は *this もオブジェクトを管理しません。 代入後、 *thisr がそれまで保持していたポインタを格納し、 use_count()==1 になります。 また、 r は空になります。 shared_ptr<T>(r).swap(*this) と同等です。

4) r によって管理されているオブジェクトの所有権を *this に転送します。 r に紐付いているデリータが管理対象オブジェクトの将来の削除のために格納されます。 呼び出し後、 r の管理するオブジェクトはなくなります。 shared_ptr<T>(std::move(r)).swap(*this) と同等です。

目次

[編集] 引数

r - 所有権を共有または取得する別のスマートポインタ

[編集] 戻り値

*this

[編集] ノート

処理系は一時的な shared_ptr オブジェクトを作成することなく要求を満たすかもしれません。

[編集] 例外

3) (なし)

4) 例外を投げるかもしれません。

[編集]

[編集] 関連項目

管理対象オブジェクトを置き換えます
(パブリックメンバ関数) [edit]