SophiaFramework UNIVERSE 5.3 |
#include <SFXRefObjectPointer.h.hpp>
class SFXRefObjectPointer;
SFMTYPEDEFCLASS(SFXRefObjectPointer)
SFXRefObjectPointer クラスは、 参照カウントオブジェクトクラスに対して、参照カウントを自動管理する機能を提供します。
SFXRefObjectPointer クラスの内部実装は、以下の通りです。
#include <SFXGeneral/SFXEnvironment.h.hpp> #include <SFXPointer/SFARefObjectPointer.h.hpp> template <typename T> class SFXRefObjectPointer : public SFARefObjectPointer { public: explicit SFXRefObjectPointer (Void); template <typename M> inline SFXRefObjectPointer (SFXRefObjectPointer<M> const& param) : SFARefObjectPointer(param) { SFMCONCEPTFUNCTIONTWO(concept_convertible, M*, T*) SFMCONCEPTFUNCTIONTWO(concept_convertible, M*, SFORefObjectPtr) SFMCONCEPTFUNCTIONTWO(concept_static_castable, SFORefObjectPtr, M*) }// SFXRefObjectPointer // SFXRefObjectPointer (SFXRefObjectPointer<T> const& param); explicit SFXRefObjectPointer (T* pointer, Bool retain = true); #if 0 ~SFXRefObjectPointer (Void); #endif template <typename M> inline SFXRefObjectPointer<T>& operator= (SFXRefObjectPointer<M> const& param) { SFMCONCEPTFUNCTIONTWO(concept_convertible, M*, T*) return static_cast<SFXRefObjectPointer<T>&>(SFARefObjectPointer::operator=(param)); }// operator= // SFXRefObjectPointer<T>& operator= (SFXRefObjectPointer<T> const& param); T& operator* (Void) const; T* operator-> (Void) const; template <typename M> inline Void Set (SFXRefObjectPointer<M> const& param) { SFMCONCEPTFUNCTIONTWO(concept_convertible, M*, T*) SFARefObjectPointer::Set(param); return; }// Set // Void Set (SFXRefObjectPointer<T> const& param); Void Set (T* pointer, Bool retain = true); T* Get (Void) const; Void Attach (T* pointer); T* Detach (Void); Void Release (Void); static SFXRefObjectPointer<T> const& EmptyInstance (Void); #if defined TARGET_COMPILER_MSVCPP private: SFXRefObjectPointer<T>& operator= (VoidConstPtr); #endif }; template <typename T, typename M> extern SFXRefObjectPointer<T> reinterpret_pointer_cast (SFXRefObjectPointer<M> const& param); template <typename T, typename M> extern SFXRefObjectPointer<T> static_pointer_cast (SFXRefObjectPointer<M> const& param); #if 0 template <typename T, typename M> extern SFXRefObjectPointer<T> dynamic_pointer_cast (SFXRefObjectPointer<M> const& param); #endif template <typename T, typename M> extern SFXRefObjectPointer<T> const_pointer_cast (SFXRefObjectPointer<M> const& param); template <typename T, typename M> extern Bool operator== (SFXRefObjectPointer<T> const& left, SFXRefObjectPointer<M> const& right); template <typename T> extern Bool operator== (SFXRefObjectPointer<T> const& left, SFORefObjectConstPtr right); template <typename T> extern Bool operator== (SFORefObjectConstPtr left, SFXRefObjectPointer<T> const& right); template <typename T, typename M> extern Bool operator!= (SFXRefObjectPointer<T> const& left, SFXRefObjectPointer<M> const& right); template <typename T> extern Bool operator!= (SFXRefObjectPointer<T> const& left, SFORefObjectConstPtr right); template <typename T> extern Bool operator!= (SFORefObjectConstPtr left, SFXRefObjectPointer<T> const& right); template <typename T> /*public */inline SFXRefObjectPointer<T>::SFXRefObjectPointer(Void) : SFARefObjectPointer() { SFMCONCEPTFUNCTIONTWO(concept_convertible, T*, SFORefObjectPtr) SFMCONCEPTFUNCTIONTWO(concept_static_castable, SFORefObjectPtr, T*) }// SFXRefObjectPointer<T>::SFXRefObjectPointer // template <typename T> /*public */inline SFXRefObjectPointer<T>::SFXRefObjectPointer(SFXRefObjectPointer<T> const& param) : SFARefObjectPointer(param) { SFMCONCEPTFUNCTIONTWO(concept_convertible, T*, SFORefObjectPtr) SFMCONCEPTFUNCTIONTWO(concept_static_castable, SFORefObjectPtr, T*) }// SFXRefObjectPointer<T>::SFXRefObjectPointer // template <typename T> /*public */inline SFXRefObjectPointer<T>::SFXRefObjectPointer(T* pointer, Bool retain) : SFARefObjectPointer(pointer, retain) { SFMCONCEPTFUNCTIONTWO(concept_convertible, T*, SFORefObjectPtr) SFMCONCEPTFUNCTIONTWO(concept_static_castable, SFORefObjectPtr, T*) }// SFXRefObjectPointer<T>::SFXRefObjectPointer // template <typename T> /*public */inline SFXRefObjectPointer<T>& SFXRefObjectPointer<T>::operator=(SFXRefObjectPointer<T> const& param) { return static_cast<SFXRefObjectPointer<T>&>(SFARefObjectPointer::operator=(param)); }// SFXRefObjectPointer<T>::operator= // template <typename T> /*public */inline T& SFXRefObjectPointer<T>::operator*(Void) const { return static_cast<T&>(SFARefObjectPointer::operator*()); }// SFXRefObjectPointer<T>::operator* // template <typename T> /*public */inline T* SFXRefObjectPointer<T>::operator->(Void) const { return static_cast<T*>(SFARefObjectPointer::operator->()); }// SFXRefObjectPointer<T>::operator-> // template <typename T> /*public */inline Void SFXRefObjectPointer<T>::Set(SFXRefObjectPointer<T> const& param) { SFARefObjectPointer::Set(param); return; }// SFXRefObjectPointer<T>::Set // template <typename T> /*public */inline Void SFXRefObjectPointer<T>::Set(T* pointer, Bool retain) { SFARefObjectPointer::Set(pointer, retain); return; }// SFXRefObjectPointer<T>::Set // template <typename T> /*public */inline T* SFXRefObjectPointer<T>::Get(Void) const { return static_cast<T*>(SFARefObjectPointer::Get()); }// SFXRefObjectPointer<T>::Get // template <typename T> /*public */inline Void SFXRefObjectPointer<T>::Attach(T* pointer) { SFARefObjectPointer::Attach(pointer); return; }// SFXRefObjectPointer<T>::Attach // template <typename T> /*public */inline T* SFXRefObjectPointer<T>::Detach(Void) { return static_cast<T*>(SFARefObjectPointer::Detach()); }// SFXRefObjectPointer<T>::Detach // template <typename T> /*public */inline Void SFXRefObjectPointer<T>::Release(Void) { SFARefObjectPointer::Release(); return; }// SFXRefObjectPointer<T>::Release // template <typename T> /*public static */inline SFXRefObjectPointer<T> const& SFXRefObjectPointer<T>::EmptyInstance(Void) { return static_cast<SFXRefObjectPointer<T> const&>(SFARefObjectPointer::EmptyInstance()); }// SFXRefObjectPointer<T>::EmptyInstance // template <typename T, typename M> inline SFXRefObjectPointer<T> reinterpret_pointer_cast(SFXRefObjectPointer<M> const& param) { M* result = param.Get(); return SFXRefObjectPointer<T>(reinterpret_cast<T*>(result)); }// reinterpret_pointer_cast // template <typename T, typename M> inline SFXRefObjectPointer<T> static_pointer_cast(SFXRefObjectPointer<M> const& param) { M* result = param.Get(); return SFXRefObjectPointer<T>(static_cast<T*>(result)); }// static_pointer_cast // template <typename T, typename M> inline SFXRefObjectPointer<T> const_pointer_cast(SFXRefObjectPointer<M> const& param) { M* result = param.Get(); return SFXRefObjectPointer<T>(const_cast<T*>(result)); }// const_pointer_cast // template <typename T, typename M> inline Bool operator==(SFXRefObjectPointer<T> const& left, SFXRefObjectPointer<M> const& right) { return (left.SFARefObjectPointer::Get() == right.SFARefObjectPointer::Get()); }// operator== // template <typename T> inline Bool operator==(SFXRefObjectPointer<T> const& left, SFORefObjectConstPtr right) { return (left.SFARefObjectPointer::Get() == right); }// operator== // template <typename T> inline Bool operator==(SFORefObjectConstPtr left, SFXRefObjectPointer<T> const& right) { return (left == right.SFARefObjectPointer::Get()); }// operator== // template <typename T, typename M> inline Bool operator!=(SFXRefObjectPointer<T> const& left, SFXRefObjectPointer<M> const& right) { return (left.SFARefObjectPointer::Get() != right.SFARefObjectPointer::Get()); }// operator!= // template <typename T> inline Bool operator!=(SFXRefObjectPointer<T> const& left, SFORefObjectConstPtr right) { return (left.SFARefObjectPointer::Get() != right); }// operator!= // template <typename T> inline Bool operator!=(SFORefObjectConstPtr left, SFXRefObjectPointer<T> const& right) { return (left != right.SFARefObjectPointer::Get()); }// operator!= //
SFARefObjectPointer クラス(内部クラス)の内部実装は、以下の通りです。
#include <SFXGeneral/SFXEnvironment.h.hpp> #include <SFXStructure/SFORefObject.f.hpp> SFMTYPEDEFCLASS(SFAResponderPointer) class SFARefObjectPointer { private: SFORefObjectPtr _pointer; public: SFORefObjectPtr Get (Void) const; protected: explicit SFARefObjectPointer (Void); SFARefObjectPointer (SFARefObjectPointerConstRef param); explicit SFARefObjectPointer (SFORefObjectPtr pointer, Bool retain = true); ~SFARefObjectPointer (Void); SFARefObjectPointerRef operator= (SFARefObjectPointerConstRef param); SFORefObjectRef operator* (Void) const; SFORefObjectPtr operator-> (Void) const; Void Set (SFARefObjectPointerConstRef param); Void Set (SFORefObjectPtr pointer, Bool retain = true); Void Attach (SFORefObjectPtr pointer); SFORefObjectPtr Detach (Void); Void Release (Void); static SFARefObjectPointerConstRef EmptyInstance (Void); }; /*public */inline SFYResponderPtr SFAResponderPointer::Get(Void) const { return _pointer; }// SFAResponderPointer::Get // /*protected */inline SFAResponderPointerRef SFAResponderPointer::operator=(SFAResponderPointerConstRef param) { Set(param); return *this; }// SFAResponderPointer::operator= // /*protected */inline SFYResponderRef SFAResponderPointer::operator*(Void) const { return *_pointer; }// SFAResponderPointer::operator* // /*protected */inline SFYResponderPtr SFAResponderPointer::operator->(Void) const { return _pointer; }// SFAResponderPointer::operator-> // #include <SFXStructure/SFORefObject.h.hpp> /*protected */SFARefObjectPointer::SFARefObjectPointer(Void) : _pointer(null) { }// SFARefObjectPointer::SFARefObjectPointer // /*protected */SFARefObjectPointer::SFARefObjectPointer(SFARefObjectPointerConstRef param) : _pointer(param._pointer) { if (_pointer != null) { _pointer->Retain(); } }// SFARefObjectPointer::SFARefObjectPointer // /*protected */SFARefObjectPointer::SFARefObjectPointer(SFORefObjectPtr pointer, Bool retain) : _pointer(pointer) { if (retain) { if (_pointer != null) { _pointer->Retain(); } } }// SFARefObjectPointer::SFARefObjectPointer // /*protected */SFARefObjectPointer::~SFARefObjectPointer(Void) { if (_pointer != null) { _pointer->Release(); } }// SFARefObjectPointer::~SFARefObjectPointer // /*protected */Void SFARefObjectPointer::Set(SFARefObjectPointerConstRef param) { if (_pointer != null) { _pointer->Release(); } _pointer = param._pointer; if (_pointer != null) { _pointer->Retain(); } return; }// SFARefObjectPointer::Set // /*protected */Void SFARefObjectPointer::Set(SFORefObjectPtr pointer, Bool retain) { if (_pointer != null) { _pointer->Release(); } _pointer = pointer; if (retain) { if (_pointer != null) { _pointer->Retain(); } } return; }// SFARefObjectPointer::Set // /*protected */Void SFARefObjectPointer::Attach(SFORefObjectPtr pointer) { if (_pointer != null) { _pointer->Release(); } _pointer = pointer; return; }// SFARefObjectPointer::Attach // /*protected */SFORefObjectPtr SFARefObjectPointer::Detach(Void) { SFORefObjectPtr result(_pointer); _pointer = null; return result; }// SFARefObjectPointer::Detach // /*protected */Void SFARefObjectPointer::Release(Void) { if (_pointer != null) { _pointer->Release(); } _pointer = null; return; }// SFARefObjectPointer::Release // /*protected static */SFARefObjectPointerConstRef SFARefObjectPointer::EmptyInstance(Void) { static UInt64Const result[cluster64of(SFARefObjectPointer)] = { 0 }; return *reinterpret_cast<SFARefObjectPointerConstPtr>(result); }// SFARefObjectPointer::EmptyInstance //
コンストラクタ/デストラクタ |
---|
SFXRefObjectPointer( Void ) SFXRefObjectPointer クラスのコンストラクタです。
|
SFXRefObjectPointer(
SFXRefObjectPointer< M > const & param
) SFXRefObjectPointer クラスのコンストラクタです。
|
SFXRefObjectPointer(
SFXRefObjectPointer< T > const & param
) SFXRefObjectPointer クラスのコンストラクタです。
|
SFXRefObjectPointer(
T * pointer
, Bool retain = true
) SFXRefObjectPointer クラスのコンストラクタです。
|
[ public, explicit ] SFXRefObjectPointer(Void);
[ public ] SFXRefObjectPointer( SFXRefObjectPointer< M > const & param // コピーする SFXRefObjectPointer の const 参照 );
[ public ] SFXRefObjectPointer( SFXRefObjectPointer< T > const & param // コピーする SFXRefObjectPointer の const 参照 );
[ public, explicit ] SFXRefObjectPointer( T * pointer // 格納するインスタンスのポインタ Bool retain = true // 参照カウンタを増加させるかどうかを指定する );
このコンストラクタは、 指定されたインスタンスを設定します。
注意 | |
---|---|
引数が SFXRefObjectPointer インスタンスの場合は、コピーされます。 デフォルトでは、 設定するインスタンスの参照カウンタはインクリメントされます。 |
[ public ] Void Attach( T * pointer // 解放責任を譲るインスタンスのポインタ );
この関数は、指定されたインスタンスの解放責任を受けます。
注意 | |
---|---|
SFXRefObjectPointer クラスが解放責任を受けると、 SFXRefObjectPointer クラスがインスタンスを管理するようになり、 参照カウントの自動管理が行われます。 |
Attach 関数は
SFXRefObjectPointer::Set(address, false);
を実行するのと同じです。
[ public ] T * Detach(Void);
SFXRefObjectPointer クラスが内部に保持しているインスタンス。
この関数は、 SFXRefObjectPointer クラスが内部に保持しているインスタンスの解放責任を譲ります。
注意 | |
---|---|
SFXRefObjectPointer クラスは内部で保持していたインスタンスを管理しなくなり、 参照カウントの自動管理が行われなくなります。 |
[ public, static ] SFXRefObjectPointer< T > const & EmptyInstance(Void);
null を表す SFXRefObjectPointer インスタンスのリファレンス。
この関数は、 null を表す SFXRefObjectPointer インスタンスを取得します。
注意 | |
---|---|
この関数を利用すれば、 null を表す SFXRefObjectPointer インスタンスの const 参照を返すことができます。 |
この関数の内部実装は以下の通りです。
template <typename T> /*public static */inline SFXRefObjectPointer<T> const& SFXRefObjectPointer<T>::EmptyInstance(Void) { return static_cast<SFXRefObjectPointer<T> const&>(SFARefObjectPointer::EmptyInstance()); }// SFXRefObjectPointer<T>::EmptyInstance // /*protected static */SFARefObjectPointerConstRef SFARefObjectPointer::EmptyInstance(Void) { static UInt64Const result[cluster64of(SFARefObjectPointer)] = { 0 }; return *reinterpret_cast<SFARefObjectPointerConstPtr>(result); }// SFARefObjectPointer::EmptyInstance //
cluster64of マクロ | |
---|---|
cluster64of マクロは、 8 バイト境界にアラインしたときに 8 バイトのクラスターがいくつ必要になるかを計算するマクロです。 |
[ public, const ] T * Get(Void);
保持しているインスタンスのポインタ。
この関数は、 保持しているインスタンスのポインタを取得します。
[ public ] Void Release(Void);
この関数は、 内部に保持しているインスタンスを解放します。
注意 | |
---|---|
SFXRefObjectPointer クラスが内部に保持しているインスタンスの参照カウンタをデクリメントし、 インスタンスの管理をしなくなります。 |
[ public ] Void Set( SFXRefObjectPointer< M > const & param // 設定する SFXRefObjectPointer の const 参照 );
[ public ] Void Set( SFXRefObjectPointer< T > const & param // 設定する SFXRefObjectPointer の const 参照 );
[ public ] Void Set( T * pointer // 格納するインスタンスのポインタ Bool retain = true // 参照カウンタをインクリメントさせるかどうか );
この関数は、 指定されたインスタンスを設定します。
注意 | |
---|---|
旧いインスタンスの参照カウンタをデクリメントしてから、 新しいインスタンスのポインタを設定します。 デフォルトでは、 新しいインスタンスの参照カウンタはインクリメントされます。 |
SFXRefObjectPointer::Get | SFXRefObjectPointer::SFXRefObjectPointer | SFXRefObjectPointer::operator=
SFXRefObjectPointer< T > const_pointer_cast( SFXRefObjectPointer< M > const & param // キャストするポインタ );
この関数は、 SFXRefObjectPointer 同士で const_cast を行います。
注意 | |
---|---|
SFXRefObjectPointer 同士の const_cast は、 const_pointer_cast 関数を使用して行います。 |
SFXRefObjectPointer::static_pointer_cast | SFXRefObjectPointer::reinterpret_pointer_cast | SFXRefObjectPointer
SFXRefObjectPointer< T > reinterpret_pointer_cast( SFXRefObjectPointer< M > const & param // キャストするポインタ );
この関数は、 SFXRefObjectPointer 同士で reinterpret_cast を行います。
注意 | |
---|---|
SFXRefObjectPointer 同士の reinterpret_cast は、 reinterpret_pointer_cast 関数を使用して行います。 |
SFXRefObjectPointer::static_pointer_cast | SFXRefObjectPointer::const_pointer_cast | SFXRefObjectPointer
SFXRefObjectPointer< T > static_pointer_cast( SFXRefObjectPointer< M > const & param // キャストするポインタ );
この関数は、 SFXRefObjectPointer 同士で static_cast を行います。
注意 | |
---|---|
SFXRefObjectPointer 同士の static_cast は、 static_pointer_cast 関数を使用して行います。 |
SFXRefObjectPointer::const_pointer_cast | SFXRefObjectPointer::reinterpret_pointer_cast | SFXRefObjectPointer
[ public, const ] T * operator->(Void);
保持しているインスタンスのポインタ。
このオペレータは、 保持しているインスタンスのメンバにアクセスします。
-> オペレータのオーバーロード | |
---|---|
オーバーロードされた -> オペレータでは、 戻り値に対して事前定義された -> オペレータが更に作用されます。 SFXRefObjectPointer::Get 関数は保持しているインスタンスのポインタを返すだけですが、 SFXRefObjectPointer::operator-> オペレータは保持しているインスタンスのポインタを取得し、 更に事前定義された -> オペレータを呼び出し、 保持しているインスタンスのメンバにアクセスします。 |
[ public ] SFXRefObjectPointer< T > & operator=( SFXRefObjectPointer< M > const & param // 代入する SFXRefObjectPointer の const 参照 );
[ public ] SFXRefObjectPointer< T > & operator=( SFXRefObjectPointer< T > const & param // 代入する SFXRefObjectPointer の const 参照 );
[ public, friend ] Bool operator==( SFXRefObjectPointer< T > const & left // 比較する SFXRefObjectPointer の const 参照 SFXRefObjectPointer< M > const & right // 比較する SFXRefObjectPointer の const 参照 );
[ public, friend ] Bool operator==( SFXRefObjectPointer< T > const & left // 比較する SFXRefObjectPointer の const 参照 SFORefObjectConstPtr right // 比較する SFORefObject の const ポインタ );
[ public, friend ] Bool operator==( SFORefObjectConstPtr left // 比較する SFORefObject の const ポインタ SFXRefObjectPointer< T > const & right // 比較する SFXRefObjectPointer の const 参照 );
このオペレータは、 == の関係を判定します。
[ public, const ] T & operator*(Void);
保持しているインスタンス。
このオペレータは、 保持しているインスタンスを取得します。
[ public, friend ] Bool operator!=( SFXRefObjectPointer< T > const & left // 比較する SFXRefObjectPointer の const 参照 SFXRefObjectPointer< M > const & right // 比較する SFXRefObjectPointer の const 参照 );
[ public, friend ] Bool operator!=( SFXRefObjectPointer< T > const & left // 比較する SFXRefObjectPointer の const 参照 SFORefObjectConstPtr right // 比較する SFORefObject の const ポインタ );
[ public, friend ] Bool operator!=( SFORefObjectConstPtr left // 比較する SFORefObject の const ポインタ SFXRefObjectPointer< T > const & right // 比較する SFXRefObjectPointer の const 参照 );
このオペレータは、 == の関係を判定します。
Copyright(c) 2002 - 2024 Sophia Cradle Incorporated All Rights Reserved. |