Namespaces
Variants

std::experimental::shared_ptr<T>:: shared_ptr

From cppreference.net
**日本語訳:** **注記:** 指示に従い、HTMLタグ、属性、 タグ内のC++コード(template、class、shared_ptr、std::nullptr_tなど)は翻訳せず、元のフォーマットを保持しています。C++固有の用語も翻訳していません。 **注記**: このC++コードテンプレートは、HTMLタグとC++固有の用語(`template`, `class`, `shared_ptr`, `const`, `noexcept`, `element_type`など)を保持したまま、テキスト部分のみを翻訳する必要がありますが、提供されたコードには翻訳対象となる自然言語テキストが含まれていません。数値の"(8)"のみが翻訳可能な要素ですが、これは文脈上、項目番号として機能しているため、日本語化すると「(8)」のままが適切です。 HTMLタグ、属性、C++コード内のテキストは翻訳せず、元のフォーマットを保持しました。コードブロック内のC++固有の用語も翻訳していません。 **翻訳結果:** **注記:** このC++コード断片は以下の理由で翻訳対象外です: - HTMLタグと属性は保持 - ` `内のC++コードは翻訳対象外 - C++固有の用語(template, class, explicit, shared_ptr, const, weak_ptrなど)は翻訳せず保持 - コード構造とフォーマットは完全に維持 **翻訳結果:** **注記:** このC++コードテンプレートには翻訳すべき自然言語テキストが含まれていないため、元のコードはそのまま保持されています。HTMLタグ、属性、および` `タグ内のC++コードはすべて変更せずに維持されています。 **翻訳結果:** **注記:** このコードはC++のテンプレート宣言であり、HTMLタグ、属性、コード内のテキストはすべて保持されています。C++固有の用語(template, class, shared_ptr, unique_ptrなど)は翻訳せず、数値の(13)もそのまま保持しています。 (注:このHTML要素には翻訳対象のテキストコンテンツが含まれていないため、元の構造を保持したまま出力します)
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修飾子の集合)である場合を指す。

1,2) 管理対象オブジェクトを持たない shared_ptr を構築します。つまり空の shared_ptr です。
3-7) 管理対象オブジェクトへのポインタとして shared_ptr を構築します。 T が配列型 U[N] の場合、 Y(*)[N] T* に変換可能でなければなりません。 T が配列型 U[] の場合、 Y(*)[] T* に変換可能でなければなりません。それ以外の場合、 Y* T* に変換可能でなければなりません。さらに:
3) デリーターとして delete-expression ( delete ptr 、もし T が配列型でない場合; delete [ ] ptr もし T が配列型の場合) を使用する。 Y は完全型でなければならない。そのdelete式は適切に形成され、明確に定義された振る舞いを持ち、いかなる例外も投げてはならない。
4,5) 指定されたデリーター d を使用します。式 d ( ptr ) は適切に形成され、明確に定義された動作を持ち、例外を投げてはなりません。 Deleter CopyConstructible でなければならず、そのコピーコンストラクタとデストラクタは例外を投げてはなりません。
6,7) (4,5) と同様ですが、さらに内部使用のためのデータ割り当てに alloc のコピーを使用します。 Alloc Allocator 要件を満たす必要があり、そのコピーコンストラクタとデストラクタは例外を投げてはなりません。
8) エイリアシングコンストラクタ: shared_ptr を構築し、 r と所有権情報を共有するが、無関係かつ管理されていないポインタ ptr を保持する。この shared_ptr がグループ内で最後にスコープ外になっても、元々 r によって管理されていたオブジェクトのデストラクタを呼び出す。ただし、この shared_ptr に対して get() を呼び出すと、常に ptr のコピーが返される。プログラマは、この ptr が、このshared_ptrが存在する限り有効であり続けることを保証する責任がある。典型的な使用例では、 ptr r によって管理されるオブジェクトのメンバであるか、 r. get ( ) のエイリアス(例:ダウンキャスト)である場合などが該当する。
9) オブジェクトの所有権を共有する shared_ptr を構築します。このオブジェクトは r によって管理されているものです。 r がオブジェクトを管理していない場合、 * this もオブジェクトを管理しません。テンプレートオーバーロードは、 Y* 互換性がない 場合、オーバーロード解決に参加しません。 T*
10) r から shared_ptr をムーブ構築する。構築後、 * this r の以前の状態のコピーを含み、 r は空になる。テンプレートオーバーロードは、 Y* T* 互換性がない 場合、オーバーロード解決に参加しない。
11) r が管理するオブジェクトの所有権を共有する shared_ptr を構築する。 Y* compatible with T* でなければならない。 r. lock ( ) が同じ目的で使用できることに注意:相違点は、このコンストラクタは引数が空の場合に例外をスローするが、 weak_ptr < T > :: lock ( ) はその場合に空の shared_ptr を構築することである。
12) 以前に r が所有していたオブジェクトを格納・所有する shared_ptr を構築する。 Y* T* に変換可能でなければならない。構築後、 r は空になる。
13) r が現在管理しているオブジェクトを管理する shared_ptr を構築する。 r に関連付けられたデストラクタは、管理対象オブジェクトの将来の削除のために保存される。呼び出し後、 r はオブジェクトを管理しなくなる。このオーバーロードは、 Y* T* 互換性がない 場合、オーバーロード解決に参加しない。
D が参照型の場合、 shared_ptr ( r. release ( ) , std:: ref ( r. get_deleter ( ) ) と等価である。それ以外の場合、 shared_ptr ( r. release ( ) , r. get_deleter ( ) ) と等価である。

目次

翻訳の説明: - 「Contents」を「目次」に翻訳しました - HTMLタグ、属性、
タグ内のテキストは翻訳していません
- C++固有の用語(Notes、Parameters、Exceptions、Example、See also)は原文のまま保持しました
- 数値、クラス名、IDなどは変更していません
- 元の書式と構造を完全に保持しています

注記

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 - 所有権を共有または取得する別のスマートポインタ

例外

3) std::bad_alloc 必要な追加メモリを取得できなかった場合。その他のエラーに対しては実装定義の例外をスローする可能性がある。例外が発生した場合、対応するdelete式( delete ptr もし T が配列型でない場合、 delete [ ] ptr それ以外の場合)が呼び出される。
4-7) std::bad_alloc 必要な追加メモリを取得できなかった場合。他のエラーに対しては実装定義の例外をスローする可能性があります。 d ( ptr ) 例外が発生した場合に呼び出されます。
11) std::bad_weak_ptr if r. expired ( ) == true 。この場合、コンストラクタは何も効果を持たない。
12) std::bad_alloc 必要な追加メモリが取得できない場合に投げられる。その他のエラーに対しては実装定義の例外を投げる可能性がある。例外が発生した場合、このコンストラクタは何も効果を持たない。
13) 例外がスローされた場合、コンストラクタは効果を持たない。

関連項目

新しいオブジェクトを管理するshared_ptrを作成する
(関数テンプレート)
アロケータを使用して割り当てられた新しいオブジェクトを管理するshared_ptrを作成する
(関数テンプレート)