16#pragma warning( disable : 4284 )
39template<
typename TYP,
typename DELE, INT_PTR NUL = 0>
52 THead(TYP t =
reinterpret_cast<TYP
>(NUL), LONG l = 1) : refs(l) , type(t)
60 void m_SetHeadNull(
void)
62 m_ptHead =
reinterpret_cast<THead*
>(g_plNullBase);
66 bool m_IsHeadNull(
void)
68 return m_ptHead ==
reinterpret_cast<THead*
>(g_plNullBase);
73 if ( ! m_IsHeadNull() )
75 if ( ::InterlockedDecrement(&(m_ptHead->refs)) <= 0 )
77 if ( m_ptHead->type !=
reinterpret_cast<TYP
>(NUL) )
79 DELE()(m_ptHead->type);
96 if ( NUL != 0 ) { m_ptHead =
new THead; }
142 if ( m_ptHead->type != t )
144 if ( t !=
reinterpret_cast<TYP
>(NUL) )
147 m_ptHead =
new THead(t);
167 if ( m_ptHead != other.m_ptHead )
174 else if ( InterlockedCompareExchange(&(other.m_ptHead->refs), 2, 1) == 1 )
178 m_ptHead = other.m_ptHead;
180 else if ( (other.m_ptHead->refs) >= 1 )
184 other.m_ptHead->refs++;
185 m_ptHead = other.m_ptHead;
199 return m_ptHead->type ==
reinterpret_cast<TYP
>(NUL);
211 if ( m_IsHeadNull() ){
return 0; }
212 return ::InterlockedExchange(&(m_ptHead->refs), iCount);
234 m_ptHead =
new THead;
242 TYP*
ReferP(
void) {
return &(m_ptHead->type); }
248 TYP
const*
ReferP(
void)
const {
return &(m_ptHead->type); }
255 operator TYP(
void) {
return m_ptHead->type; }
262 operator const TYP(
void)
const {
return m_ptHead->type; }
305struct TPhDeleteSinglePtr
307 template<
typename TYP>
void operator()(TYP* P) {
delete P; }
310struct TPhDeleteArrayPtr
312 template<
typename TYP>
void operator()(TYP* P) {
delete[] P; }
346template<
typename TYP>
435template<
typename TYP>
const TYP & operator[](int ind) const
[取得] TYPポインタ取得.
CArrayPtrHandleT(TYP *P)
代入コンストラクタ.
TYP & operator[](int ind)
[取得] TYPポインタ取得.
CArrayPtrHandleT(void)
コンストラクタ.
CArrayPtrHandleT(const CArrayPtrHandleT &t)
コピーコンストラクタ.
TYP operator->(void)
[取得] TYP取得.
CPointerHandleBaseT & operator=(const CPointerHandleBaseT &other)
[代入] コピーオペレータ.
friend class CPointerHandleTest
フレンドクラス宣言
const TYP operator->(void) const
[取得] TYP取得.
int SetReferCount(int iCount)
[設定] 参照数設定
CPointerHandleBaseT(TYP t)
代入コンストラクタ.
int GetReferCount(void) const
[取得] 参照数取得.
bool operator!=(TYP t) const
[比較] TYP比較.
TYP * ReferP(void)
[取得] TYPのポインタ取得.
CPointerHandleBaseT & operator=(TYP t)
[代入] 代入.
bool IsNull(void) const
[確認] NULLチェック
~CPointerHandleBaseT(void)
デストラクタ.
CPointerHandleBaseT(const CPointerHandleBaseT &other)
コピーコンストラクタ.
CPointerHandleBaseT(void)
コンストラクタ.
TYP const * ReferP(void) const
[取得] TYPのポインタ取得.
bool operator==(TYP t) const
[比較] TYP比較.
CPointerHandleT(void)
コンストラクタ.
CPointerHandleT(TYP *P)
代入コンストラクタ.
const TYP & operator*(void) const
[取得] TYPポインタ取得.
CPointerHandleT(const CPointerHandleT &t)
コピーコンストラクタ.
TYP & operator*(void)
[取得] TYPポインタ取得.