System::SmartPtr クラス

SmartPtr class

ヒープ上に割り当てられる型をラップするポインタクラスです。Object を継承するクラスのメモリ管理に使用します。このポインタ型は侵入型ポインタのセマンティクスに従います。参照カウンタは Object 自体または Object インスタンスに tightly 結び付けられたカウンタ構造体に格納されます。いずれの場合も、すべての SmartPtr インスタンスは作成方法に関係なく単一所有グループを形成し、std::shared_ptr クラスの動作とは異なります。生ポインタを SmartPtr に変換しても、同じオブジェクトへの共有参照を保持する他の SmartPtr インスタンスが存在すれば安全です。SmartPtr クラスのインスタンスは、共有ポインタと弱ポインタの 2 つの状態のいずれかになります。オブジェクトを生存させるには、共有参照のカウントが正である必要があります。弱ポインタと共有ポインタの両方で、指されたオブジェクトへ(メソッド呼び出し、フィールドの読み書きなど)アクセスできますが、弱ポインタは共有ポインタの参照カウントには参加しません。Object は最後の ‘shared’ SmartPtr ポインタが破棄されると削除されます。したがって、オブジェクト構築や破棄時に他に共有 SmartPtr ポインタが存在しない場合にこの状況が起こらないようにしてください。C++ コードでは System::Object::ThisProtector センティリオブジェクト、C# コード(変換対象)では CppCTORSelfReference または CppSelfReference 属性を使用してこの問題を修正します。同様に、System::WeakPtr ポインタクラスや System::SmartPtrMode::Weak ポインタモード(C++ コード)または CppWeakPtr 属性(C# コード)を使用してループ参照を解消してください。2 つ以上のオブジェクトが ‘shared’ ポインタで相互参照すると、決して削除されません。実行時にポインタタイプ(弱または共有)を切り替える必要がある場合は、System::SmartPtr::set_Mode() メソッドまたは System::DynamicWeakPtr クラスを使用します。SmartPtr クラスは仮想メソッドを含みません。独自のメモリ管理戦略を作成する場合にのみ継承すべきです。この型は他のオブジェクトの削除を管理するポインタで、スタック上に割り当て、値渡しまたは const 参照で関数に渡すべきです。

template<class T>class SmartPtr
パラメーター説明
T指し示すオブジェクトの型。System::Object またはそのサブクラスである必要があります。

メソッド

メソッド説明
begin()基底コレクションの begin() メソッドへのアクセサ。SmartPtr_begin() メソッドを持つ特殊化型である場合にのみコンパイルされます。
begin() const基底コレクションの begin() メソッドへのアクセサ。SmartPtr_begin() メソッドを持つ特殊化型である場合にのみコンパイルされます。
Cast() constポインタをその型自身にキャストします。
Cast() conststatic_cast を使用してポインタを基底型にキャストします。
Cast() constdynamic_cast を使用してポインタを派生型にキャストします。
Cast() constdynamic_cast を使用してポインタを派生型にキャストします。
cbegin() const基底コレクションの cbegin() メソッドへのアクセサ。SmartPtr_cbegin() メソッドを持つ特殊化型である場合にのみコンパイルされます。
cend() const基底コレクションの cend() メソッドへのアクセサ。SmartPtr_cend() メソッドを持つ特殊化型である場合にのみコンパイルされます。
const_pointer_cast() const指し示すオブジェクトに対して const_cast を使用してポインタを別の型にキャストします。
dynamic_pointer_cast() const指し示すオブジェクトに対して dynamic_cast を使用してポインタを別の型にキャストします。
end()基底コレクションの end() メソッドへのアクセサ。SmartPtr_end() メソッドを持つ特殊化型である場合にのみコンパイルされます。
end() const基底コレクションの end() メソッドへのアクセサ。SmartPtr_end() メソッドを持つ特殊化型である場合にのみコンパイルされます。
get() const指し示すオブジェクトを取得します。
get_Mode() constポインタモードを取得します。
get_shared() const指し示されたオブジェクトを取得しますが、ポインタが共有モードであることをアサートします。
get_shared_count() const参照対象オブジェクトに存在する共有ポインタの数(現在のポインタを含む)を取得します。現在のポインタが共有モードであることをアサートします。
GetHashCode() const指し示されたオブジェクトで GetHashCode() を呼び出します。
GetObjectNotNull() const現在参照されているオブジェクト(存在する場合)を取得するか、例外をスローします。
GetObjectOrNull() const指し示されたオブジェクト(存在する場合)または nullptr を取得します。これは get() と同等です。
GetObjectOwner() const参照されているオブジェクトを取得します。
GetPointer() const指し示されたオブジェクト(存在する場合)または nullptr を取得します。これは get() と同等です。
Is(const System::TypeInfo&) const指し示されたオブジェクトが特定の型またはその子型かどうかをチェックします。C# の ‘is’ セマンティクスに従います。
IsAliasingPtr() constポインタが所有しているオブジェクト以外(エイリアシングコンストラクタで作成された)に指し示されているかどうかをチェックします。
IsShared() constポインタが共有モードかどうかをチェックします。
IsWeak() constポインタが弱参照モードかどうかをチェックします。
explicit operator bool() constポインタが null でないかどうかをチェックします。
operator!() constポインタが null かどうかをチェックします。
operator*() const指し示されたオブジェクトへの参照を取得します。ポインタが null でないことをアサートします。
operator->() const参照されたオブジェクトのメンバーにアクセスできるようにします。
operator<(Y *) constSmartPtr クラスに対して less 比較のセマンティクスを提供します。
operator<(SmartPtr<Y> const&) constSmartPtr クラスに対して less 比較のセマンティクスを提供します。
operator=(SmartPtr_&&)SmartPtr オブジェクトにムーブ代入します。x は使用不能になります。
operator=(const SmartPtr_&)SmartPtr オブジェクトにコピー代入します。
operator=(const SmartPtr<Q>&)SmartPtr オブジェクトにコピー代入します。必要な型変換を行います。
operator=(Pointee_ *)生ポインタを SmartPtr オブジェクトに代入します。
operator=(std::nullptr_t)ポインタの値を nullptr に設定します。
operator==(std::nullptr_t) constポインタが nullptr を指しているかどうかをチェックします。
operator[](IdxType) const配列要素へのアクセサです。SmartPtr_System::Array の特殊化である場合にのみコンパイルされます。
RemoveAliasing() constポインタからエイリアシング(エイリアシングコンストラクタで作成された)を除去し、指し示すオブジェクトが同じであることを保証します(共有の場合は管理し、弱参照の場合は追跡します)。
reset(Pointee_ *)指し示されたオブジェクトを設定します。
reset()ポインタが nullptr を指すようにします。
set_Mode(SmartPtrMode)ポインタモードを設定します。参照されているオブジェクトの参照カウントが変更される可能性があります。
SetContainedTemplateWeakPtr(uint32_t) const指されているオブジェクト(存在する場合)で SetTemplateWeakPtr() メソッドを呼び出します。
SmartPtr(SmartPtrMode)必要なモードの SmartPtr オブジェクトを作成します。
SmartPtr(std::nullptr_t, SmartPtrMode)必要なモードの null ポインタ SmartPtr オブジェクトを作成します。
SmartPtr(Pointee_ *, SmartPtrMode)指定されたオブジェクトを指す SmartPtr を作成するか、生ポインタを SmartPtr に変換します。
SmartPtr(const SmartPtr_&, SmartPtrMode)SmartPtr オブジェクトをコピー構築します。その後、両方のポインタは同じオブジェクトを指します。
SmartPtr(const SmartPtr<Q>&, SmartPtrMode)SmartPtr オブジェクトをコピー構築します。その後、両方のポインタは同じオブジェクトを指します。許可されている場合は型変換を実行します。
SmartPtr(SmartPtr_&&, SmartPtrMode)SmartPtr オブジェクトをムーブ構築します。実質的に、両方が同じモードであれば二つのポインタを入れ替えます。呼び出し後、x は使用できなくなる可能性があります。
explicit SmartPtr(const SmartPtr<Array<Y>>&, SmartPtrMode)参照された配列の型を、異なる型の新しい配列を作成して変換します。C# で配列の型キャストが可能だが C++ ではサポートされていない場合に便利です。
explicit SmartPtr(const Y&)空の配列を初期化します。いくつかの C# コード構文を変換するために使用されます。
SmartPtr(const SmartPtr<P>&, Pointee_ *, SmartPtrMode)ptr の初期値と所有権情報を共有するが、無関係で管理されていないポインタ p を保持する SmartPtr を構築します。
static_pointer_cast() const指されているオブジェクトに対して static_cast を使用してポインタを別の型にキャストします。
ToObjectPtr() const任意のポインタ型を Object へのポインタに変換します。Pointee_ 型が完全である必要はありません。
static Type()Pointee_ 型の System::TypeInfo オブジェクトを取得するショートカットです。
~SmartPtr()SmartPtr オブジェクトを破棄します。必要に応じて、指されているオブジェクトの参照カウンタを減らし、オブジェクトを削除します。

Typedefs

型定義説明
ArrayTypePointee_System::Array の特殊化である場合はそれと同じで、そうでなければ void です。
Pointee_指し示す型。
SmartPtr_特殊化されたスマートポインタ型です。
ValueType指された配列の格納型です。T が System::Array の特殊化である場合にのみ意味があります。

参照