std::experimental::shared_ptr<T>:: shared_ptr
|
constexpr
shared_ptr
(
)
noexcept
;
|
(1) | |
|
constexpr
shared_ptr
(
std::
nullptr_t
)
noexcept
;
|
(2) | |
|
template
<
class
Y
>
explicit shared_ptr ( Y * ptr ) ; |
(3) | |
|
template
<
class
Y,
class
Deleter
>
shared_ptr ( Y * ptr, Deleter d ) ; |
(4) | |
|
template
<
class
Deleter
>
shared_ptr ( std:: nullptr_t ptr, Deleter d ) ; |
(5) | |
|
template
<
class
Deleter
>
shared_ptr ( std:: nullptr_t ptr, Deleter d ) ; |
(5) | |
|
template
<
class
Y,
class
Deleter,
class
Alloc
>
shared_ptr ( Y * ptr, Deleter d, Alloc alloc ) ; |
(6) | |
|
template
<
class
Deleter,
class
Alloc
>
shared_ptr ( std:: nullptr_t ptr, Deleter d, Alloc alloc ) ; |
(7) | |
|
template
<
class
Y
>
shared_ptr ( const shared_ptr < Y > & r, element_type * ptr ) noexcept ; |
(8) | |
|
shared_ptr
(
const
shared_ptr
&
r
)
noexcept
;
|
(9) | |
|
template
<
class
Y
>
shared_ptr ( const shared_ptr < Y > & r ) noexcept ; |
(9) | |
|
shared_ptr
(
shared_ptr
&&
r
)
noexcept
;
|
(10) | |
|
template
<
class
Y
>
shared_ptr ( shared_ptr < Y > && r ) noexcept ; |
(10) | |
|
template
<
class
Y
>
explicit shared_ptr ( const std:: weak_ptr < Y > & r ) ; |
(11) | |
|
template
<
class
Y
>
explicit shared_ptr ( const std:: weak_ptr < Y > & r ) ; |
(11) | |
|
template
<
class
Y
>
shared_ptr ( std:: auto_ptr < Y > && r ) ; |
(12) | |
|
template
<
class
Y
>
shared_ptr ( std:: auto_ptr < Y > && r ) ; |
(12) | |
|
template
<
class
Y,
class
Deleter
>
shared_ptr ( std:: unique_ptr < Y,Deleter > && r ) ; |
(13) | |
|
template
<
class
Y,
class
Deleter
>
shared_ptr ( std:: unique_ptr < Y,Deleter > && r ) ; |
(13) | |
オブジェクトを管理するための様々なポインタ型から新しい
shared_ptr
を構築します。
以下の説明において、ポインタ型
Y*
は、ポインタ型
T*
と互換性があると言われる。これは、
Y*
が
T*
に変換可能である場合、または
Y
が配列型
U[N]
であり、かつ
T
が
U cv []
(ここでcvは何らかのcv修飾子の集合)である場合を指す。
shared_ptr
を構築します。つまり空の
shared_ptr
です。
shared_ptr
を構築します。
T
が配列型
U[N]
の場合、
Y(*)[N]
は
T*
に変換可能でなければなりません。
T
が配列型
U[]
の場合、
Y(*)[]
は
T*
に変換可能でなければなりません。それ以外の場合、
Y*
は
T*
に変換可能でなければなりません。さらに:
T
が配列型でない場合;
delete
[
]
ptr
もし
T
が配列型の場合) を使用する。
Y
は完全型でなければならない。そのdelete式は適切に形成され、明確に定義された振る舞いを持ち、いかなる例外も投げてはならない。
Deleter
は
CopyConstructible
でなければならず、そのコピーコンストラクタとデストラクタは例外を投げてはなりません。
Alloc
は
Allocator
要件を満たす必要があり、そのコピーコンストラクタとデストラクタは例外を投げてはなりません。
shared_ptr
を構築し、
r
と所有権情報を共有するが、無関係かつ管理されていないポインタ
ptr
を保持する。この
shared_ptr
がグループ内で最後にスコープ外になっても、元々
r
によって管理されていたオブジェクトのデストラクタを呼び出す。ただし、この
shared_ptr
に対して
get()
を呼び出すと、常に
ptr
のコピーが返される。プログラマは、この
ptr
が、このshared_ptrが存在する限り有効であり続けることを保証する責任がある。典型的な使用例では、
ptr
が
r
によって管理されるオブジェクトのメンバであるか、
r.
get
(
)
のエイリアス(例:ダウンキャスト)である場合などが該当する。
shared_ptr
を構築します。このオブジェクトは
r
によって管理されているものです。
r
がオブジェクトを管理していない場合、
*
this
もオブジェクトを管理しません。テンプレートオーバーロードは、
Y*
が
互換性がない
場合、オーバーロード解決に参加しません。
T*
。
r
から
shared_ptr
をムーブ構築する。構築後、
*
this
は
r
の以前の状態のコピーを含み、
r
は空になる。テンプレートオーバーロードは、
Y*
が
T*
と
互換性がない
場合、オーバーロード解決に参加しない。
shared_ptr
を構築する。
Y*
は
compatible with
T*
でなければならない。
r.
lock
(
)
が同じ目的で使用できることに注意:相違点は、このコンストラクタは引数が空の場合に例外をスローするが、
weak_ptr
<
T
>
::
lock
(
)
はその場合に空の
shared_ptr
を構築することである。
shared_ptr
を構築する。
Y*
は
T*
に変換可能でなければならない。構築後、
r
は空になる。
shared_ptr
を構築する。
r
に関連付けられたデストラクタは、管理対象オブジェクトの将来の削除のために保存される。呼び出し後、
r
はオブジェクトを管理しなくなる。このオーバーロードは、
Y*
が
T*
と
互換性がない
場合、オーバーロード解決に参加しない。
D
が参照型の場合、
shared_ptr
(
r.
release
(
)
,
std::
ref
(
r.
get_deleter
(
)
)
と等価である。それ以外の場合、
shared_ptr
(
r.
release
(
)
, r.
get_deleter
(
)
)
と等価である。
目次 |
、
、
注記
rawポインタから
std::experimental::enable_shared_from_this
から派生した型のオブジェクトへの
shared_ptr
を構築する際、
shared_ptr
のコンストラクタは
std::experimental::enable_shared_from_this
基底クラスの
非公開
weak_ptr
メンバを更新し、将来の
shared_from_this()
の呼び出しが
このrawポインタコンストラクタによって作成された
shared_ptr
と所有権を共有できるようにします。
生ポインタのオーバーロードは、指し示されるオブジェクトの所有権を仮定するため、既に
shared_ptr
によって管理されているオブジェクトに対して生ポインタのオーバーロードを使用して
shared_ptr
を構築すると、たとえそのオブジェクトが
std::experimental::enable_shared_from_this
から派生した型であっても、未定義動作を引き起こす可能性があります。
パラメータ
| ptr | - | 管理対象オブジェクトへのポインタ |
| d | - | オブジェクト破棄に使用するデリーター |
| alloc | - | 内部使用データの割り当てに使用するアロケーター |
| r | - | 所有権を共有または取得する別のスマートポインタ |
例外
T
が配列型でない場合、
delete
[
]
ptr
それ以外の場合)が呼び出される。
例
|
このセクションは不完全です
理由: 例がありません |
関連項目
|
新しいオブジェクトを管理するshared_ptrを作成する
(関数テンプレート) |
|
|
アロケータを使用して割り当てられた新しいオブジェクトを管理するshared_ptrを作成する
(関数テンプレート) |