|
// AutoItemInfoPtr.h: interface for the CAutoItemInfoPtr class.
//
// Author : David Shepherd
// Copyright (c) 2002, DaeDoe-Software
//
/////////////////////////////////////////////////////////////////////////////
#if !defined(AFX_AUTOITEMINFOPTR_H__8CE4B024_2EEE_11D6_B6A6_FB1C95524145__INCLUDED_)
#define AFX_AUTOITEMINFOPTR_H__8CE4B024_2EEE_11D6_B6A6_FB1C95524145__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
/////////////////////////////////////////////////////////////////////////////
// CAutoItemInfoPtr
class CAutoItemInfoPtr
{
private:
// this will be set TRUE if we own the item info pointer
BOOL m_Owns;
// the item info pointer
CItemInfo *m_pItemInfo;
public:
explicit CAutoItemInfoPtr(CItemInfo *pItemInfo=NULL) :
m_Owns((pItemInfo==NULL) ? FALSE : TRUE),
m_pItemInfo(pItemInfo)
{}
CAutoItemInfoPtr(CAutoItemInfoPtr &Obj) :
m_Owns(Obj.m_Owns),
m_pItemInfo(Obj.Release())
{}
~CAutoItemInfoPtr()
{
// free the item info
if(m_Owns)
{
CItemInfo::DeleteObject(m_pItemInfo);
}
}
const CAutoItemInfoPtr &operator=(CAutoItemInfoPtr &Obj)
{
// check for self assignment
if(this==&Obj)
{
return *this;
}
// assign from a different item info pointer
if(m_pItemInfo!=Obj.Get())
{
if(m_Owns)
{
CItemInfo::DeleteObject(m_pItemInfo);
}
m_Owns=Obj.m_Owns;
}
// assign from the same item info pointer
else if(Obj.m_Owns)
{
m_Owns=TRUE;
}
return m_pItemInfo=Obj.Release(), *this;
}
CItemInfo *Release()
{
// release ownership
m_Owns=FALSE;
// return the item info pointer
return m_pItemInfo;
}
CItemInfo *Get() const
{
// return the item info pointer
return m_pItemInfo;
}
operator CItemInfo *() const
{
// return the item info pointer
return m_pItemInfo;
}
CItemInfo *operator->()
{
// return the item info pointer
return m_pItemInfo;
}
};
#endif // !defined(AFX_AUTOITEMINFOPTR_H__8CE4B024_2EEE_11D6_B6A6_FB1C95524145__INCLUDED_)
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.