You.i Engine
Smart Pointers

Detailed Description

Data types which provide memory management by taking ownership of their contents and providing methods to control their lifetime.

You.i Engine provides some smart pointer implementations to assist in memory management. Smart pointers are abstract data types which behave like pointers but provide additional features which aid in memory reclaimation, tracking ownership, and preventing unnecessary copies. Smart pointers also communicate memory ownership across objects and APIs more clearly than raw pointers allow.

The following smart pointers are available in You.i Engine:

Deprecated:
The CYISharedPtr, CYIWeakPtr, CYIScopedPtr, CYISharedArray, CYIWeakArray and CYIScopedArray classes were previously provided by the engine but are now deprecated. Use the standard library classes std::shared_ptr, std::weak_ptr and std::unique_ptr instead.

CYICowPtr

CYICowPtr is a copy-on-write pointer. It performs a shallow copy of its contents until those contents are modified. Once modified, the data is 'detached' and a deep copy is performed. This is an optimization strategy which allows for quick copying of large amounts of data while ensuring that modifications that need to be made to the data do not inadvertently cause modifications to the other references to it.

class Person
{
public:
    Person(int32_t id) : m_pID(id) {}

    // Const functions ensure the CYICowPtr will not be detached, therefore avoiding a deep copy.
   const int32_t &GetID() const; 

    // Non-const functions mean that a detach occurs and a deep copy is performed.
    void SetID(int32_t nID);

   CYICowPtr<int32_t> m_pID;
}

int main()
{
    Person person1(1); // A new person with ID 1 is created.
    Person person = person1; // A shallow-copy of person1 is performed, person and person1 both point to the same data (ID of 1)

    person.GetID(); // Returns 1, no copy is made.
    person.SetID(2); // The data is being modified, so a detach occurs and a deep copy of the data is performed. Now there are two distinct objects. A person with ID 1 and a person with ID 2.

    return 0;
} 

Classes

class  CYIAbstractDeleter< YI_RAW_PTR >
 
class  CYICallbackDeleter< YI_RAW_PTR >
 
class  CYICowPtr< YI_PTR_TYPE, YI_DELETE_FUNCTOR >
 The CYICowPtr is a smart pointer that performs a shallow-copy when duplicated, and a deep-copy only when a copy is altered. More...
 
class  CYIDefaultPtrDeleter< YI_RAW_PTR >
 
struct  CYICheckedDeleteFunctor< YI_PTR_TYPE >
 
struct  CYICheckedArrayDeleteFunctor< YI_PTR_TYPE >
 
class  IYIDeleter
 
class  CYIEnableSharedFromThis< YI_PTR_TYPE >
 CYIEnableSharedFromThis<T> allows an object currently managed by a CYISharedPtr to safely generation additional CYISharedPtr internally. More...
 
class  CYIFunctorDeleter< YI_RAW_PTR, YI_FUNCTION_OBJECT >
 
class  CYIReferenceCounter
 
class  CYIScopedArray< YI_ARRAY_TYPE, YI_DELETE_FUNCTOR >
 The CYIScopedArray is a smart pointer that takes sole ownership of a dynamically allocated array of objects, and destroys the array when going out of scope using the delete [] operator. More...
 
class  CYIScopedPtr< YI_PTR_TYPE, YI_DELETE_FUNCTOR >
 The CYIScopedPtr is a smart pointer that takes sole ownership of a dynamically allocated object, and destroys the object when going out of scope. More...
 
class  CYIWeakArray< YI_ARRAY_TYPE >
 The CYIWeakArray is a smart pointer that does not take ownership of a dynamically allocated array of objects and will never delete the object. Instead, the CYIWeakArray will automatically point to nullptr should the array be deleted by the last CYISharedArray going out-of-scope. More...
 
class  CYISharedArray< YI_ARRAY_TYPE >
 The CYISharedArray is a smart pointer that takes shared ownership of a dynamically allocated array of objects, and destroys the array when going out of scope using the delete [] operator only when no other CYISharedArray are referencing the array. More...
 
class  CYIWeakPtr< YI_PTR_TYPE >
 The CYIWeakPtr is a smart pointer that does not take any ownership of a dynamically allocated object. It will never delete the object. When the object is deleted by the last strong reference, CYIWeakPtr will automatically point to nullptr. More...
 
class  CYISharedPtr< YI_PTR_TYPE >
 The CYISharedPtr is a smart pointer that takes a shared ownership of a dynamically allocated object. The last instance of CYISharedPtr going out-of-scope will clean up the memory thus avoiding memory leaks. More...
 

Functions

template<typename YI_L_PTR_TYPE , typename YI_L_DELETE_FUNCTOR , typename YI_R_PTR_TYPE , typename YI_R_DELETE_FUNCTOR >
bool operator== (const CYICowPtr< YI_L_PTR_TYPE, YI_L_DELETE_FUNCTOR > &rLhs, const CYICowPtr< YI_R_PTR_TYPE, YI_R_DELETE_FUNCTOR > &rRhs)
 
template<typename YI_L_PTR_TYPE , typename YI_L_DELETE_FUNCTOR , typename YI_R_PTR_TYPE , typename YI_R_DELETE_FUNCTOR >
bool operator!= (const CYICowPtr< YI_L_PTR_TYPE, YI_L_DELETE_FUNCTOR > &rLhs, const CYICowPtr< YI_R_PTR_TYPE, YI_R_DELETE_FUNCTOR > &rRhs)
 
template<typename YI_L_PTR_TYPE , typename YI_L_DELETE_FUNCTOR , typename YI_R_PTR_TYPE >
bool operator== (const CYICowPtr< YI_L_PTR_TYPE, YI_L_DELETE_FUNCTOR > &rLhs, const YI_R_PTR_TYPE *pRhs)
 
template<typename YI_L_PTR_TYPE , typename YI_L_DELETE_FUNCTOR , typename YI_R_PTR_TYPE >
bool operator!= (const CYICowPtr< YI_L_PTR_TYPE, YI_L_DELETE_FUNCTOR > &rLhs, const YI_R_PTR_TYPE *pRhs)
 
template<typename YI_L_PTR_TYPE , typename YI_R_PTR_TYPE , typename YI_R_DELETE_FUNCTOR >
bool operator== (const YI_L_PTR_TYPE *pLhs, const CYICowPtr< YI_R_PTR_TYPE, YI_R_DELETE_FUNCTOR > &rRhs)
 
template<typename YI_L_PTR_TYPE , typename YI_R_PTR_TYPE , typename YI_R_DELETE_FUNCTOR >
bool operator!= (const YI_L_PTR_TYPE *pLhs, const CYICowPtr< YI_R_PTR_TYPE, YI_R_DELETE_FUNCTOR > &rRhs)
 
template<typename YI_PTR_TYPE >
void YI_CHECKED_DELETE (YI_PTR_TYPE *pPtr)
 
template<typename YI_PTR_TYPE >
void YI_CHECKED_ARRAY_DELETE (YI_PTR_TYPE pArray[])
 
template<typename YI_L_ARRAY_TYPE , typename YI_L_DELETE_FUNCTOR , typename YI_R_ARRAY_TYPE , typename YI_R_DELETE_FUNCTOR >
bool operator== (const CYIScopedArray< YI_L_ARRAY_TYPE, YI_L_DELETE_FUNCTOR > &rLhs, const CYIScopedArray< YI_R_ARRAY_TYPE, YI_R_DELETE_FUNCTOR > &rRhs)
 
template<typename YI_L_ARRAY_TYPE , typename YI_L_DELETE_FUNCTOR , typename YI_R_ARRAY_TYPE , typename YI_R_DELETE_FUNCTOR >
bool operator!= (const CYIScopedArray< YI_L_ARRAY_TYPE, YI_L_DELETE_FUNCTOR > &rLhs, const CYIScopedArray< YI_R_ARRAY_TYPE, YI_R_DELETE_FUNCTOR > &rRhs)
 
template<typename YI_L_ARRAY_TYPE , typename YI_L_DELETE_FUNCTOR , typename YI_R_ARRAY_TYPE >
bool operator== (const CYIScopedArray< YI_L_ARRAY_TYPE, YI_L_DELETE_FUNCTOR > &rLhs, const YI_R_ARRAY_TYPE pRhs[])
 
template<typename YI_L_ARRAY_TYPE , typename YI_L_DELETE_FUNCTOR , typename YI_R_ARRAY_TYPE >
bool operator!= (const CYIScopedArray< YI_L_ARRAY_TYPE, YI_L_DELETE_FUNCTOR > &rLhs, const YI_R_ARRAY_TYPE pRhs[])
 
template<typename YI_L_ARRAY_TYPE , typename YI_R_ARRAY_TYPE , typename YI_R_DELETE_FUNCTOR >
bool operator== (const YI_L_ARRAY_TYPE pLhs[], const CYIScopedArray< YI_R_ARRAY_TYPE, YI_R_DELETE_FUNCTOR > &rRhs)
 
template<typename YI_L_ARRAY_TYPE , typename YI_R_ARRAY_TYPE , typename YI_R_DELETE_FUNCTOR >
bool operator!= (const YI_L_ARRAY_TYPE pLhs[], const CYIScopedArray< YI_R_ARRAY_TYPE, YI_R_DELETE_FUNCTOR > &rRhs)
 
template<typename YI_L_PTR_TYPE , typename YI_L_DELETE_FUNCTOR , typename YI_R_PTR_TYPE , typename YI_R_DELETE_FUNCTOR >
bool operator== (const CYIScopedPtr< YI_L_PTR_TYPE, YI_L_DELETE_FUNCTOR > &rLhs, const CYIScopedPtr< YI_R_PTR_TYPE, YI_R_DELETE_FUNCTOR > &rRhs)
 
template<typename YI_L_PTR_TYPE , typename YI_L_DELETE_FUNCTOR , typename YI_R_PTR_TYPE , typename YI_R_DELETE_FUNCTOR >
bool operator!= (const CYIScopedPtr< YI_L_PTR_TYPE, YI_L_DELETE_FUNCTOR > &rLhs, const CYIScopedPtr< YI_R_PTR_TYPE, YI_R_DELETE_FUNCTOR > &rRhs)
 
template<typename YI_L_PTR_TYPE , typename YI_L_DELETE_FUNCTOR , typename YI_R_PTR_TYPE >
bool operator== (const CYIScopedPtr< YI_L_PTR_TYPE, YI_L_DELETE_FUNCTOR > &rLhs, const YI_R_PTR_TYPE *pRhs)
 
template<typename YI_L_PTR_TYPE , typename YI_L_DELETE_FUNCTOR , typename YI_R_PTR_TYPE >
bool operator!= (const CYIScopedPtr< YI_L_PTR_TYPE, YI_L_DELETE_FUNCTOR > &rLhs, const YI_R_PTR_TYPE *pRhs)
 
template<typename YI_L_PTR_TYPE , typename YI_R_PTR_TYPE , typename YI_R_DELETE_FUNCTOR >
bool operator== (const YI_L_PTR_TYPE *pLhs, const CYIScopedPtr< YI_R_PTR_TYPE, YI_R_DELETE_FUNCTOR > &rRhs)
 
template<typename YI_L_PTR_TYPE , typename YI_R_PTR_TYPE , typename YI_R_DELETE_FUNCTOR >
bool operator!= (const YI_L_PTR_TYPE *pLhs, const CYIScopedPtr< YI_R_PTR_TYPE, YI_R_DELETE_FUNCTOR > &rRhs)
 
template<typename YI_L_ARRAY_TYPE , typename YI_R_ARRAY_TYPE >
bool operator== (const CYISharedArray< YI_L_ARRAY_TYPE > &rLhs, const CYISharedArray< YI_R_ARRAY_TYPE > &rRhs)
 
template<typename YI_L_ARRAY_TYPE , typename YI_R_ARRAY_TYPE >
bool operator!= (const CYISharedArray< YI_L_ARRAY_TYPE > &rLhs, const CYISharedArray< YI_R_ARRAY_TYPE > &rRhs)
 
template<typename YI_L_ARRAY_TYPE , typename YI_R_PTR_TYPE >
bool operator== (const CYISharedArray< YI_L_ARRAY_TYPE > &rLhs, const CYISharedPtr< YI_R_PTR_TYPE > &rRhs)
 
template<typename YI_L_ARRAY_TYPE , typename YI_R_PTR_TYPE >
bool operator!= (const CYISharedArray< YI_L_ARRAY_TYPE > &rLhs, const CYISharedPtr< YI_R_PTR_TYPE > &rRhs)
 
template<typename YI_L_PTR_TYPE , typename YI_R_ARRAY_TYPE >
bool operator== (const CYISharedPtr< YI_L_PTR_TYPE > &rLhs, const CYISharedArray< YI_R_ARRAY_TYPE > &rRhs)
 
template<typename YI_L_PTR_TYPE , typename YI_R_ARRAY_TYPE >
bool operator!= (const CYISharedPtr< YI_L_PTR_TYPE > &rLhs, const CYISharedArray< YI_R_ARRAY_TYPE > &rRhs)
 
template<typename YI_L_ARRAY_TYPE , typename YI_R_PTR_TYPE >
bool operator== (const CYISharedArray< YI_L_ARRAY_TYPE > &rLhs, const CYIWeakPtr< YI_R_PTR_TYPE > &rRhs)
 
template<typename YI_L_ARRAY_TYPE , typename YI_R_PTR_TYPE >
bool operator!= (const CYISharedArray< YI_L_ARRAY_TYPE > &rLhs, const CYIWeakPtr< YI_R_PTR_TYPE > &rRhs)
 
template<typename YI_L_PTR_TYPE , typename YI_R_ARRAY_TYPE >
bool operator== (const CYIWeakPtr< YI_L_PTR_TYPE > &rLhs, const CYISharedArray< YI_R_ARRAY_TYPE > &rRhs)
 
template<typename YI_L_PTR_TYPE , typename YI_R_ARRAY_TYPE >
bool operator!= (const CYIWeakPtr< YI_L_PTR_TYPE > &rLhs, const CYISharedArray< YI_R_ARRAY_TYPE > &rRhs)
 
template<typename YI_L_ARRAY_TYPE , typename YI_R_ARRAY_TYPE >
bool operator== (const CYISharedArray< YI_L_ARRAY_TYPE > &rLhs, const YI_R_ARRAY_TYPE pRhs[])
 
template<typename YI_L_ARRAY_TYPE , typename YI_R_ARRAY_TYPE >
bool operator!= (const CYISharedArray< YI_L_ARRAY_TYPE > &rLhs, const YI_R_ARRAY_TYPE pRhs[])
 
template<typename YI_L_ARRAY_TYPE , typename YI_R_ARRAY_TYPE >
bool operator== (const YI_L_ARRAY_TYPE pLhs[], const CYISharedArray< YI_R_ARRAY_TYPE > &rRhs)
 
template<typename YI_L_ARRAY_TYPE , typename YI_R_ARRAY_TYPE >
bool operator!= (const YI_L_ARRAY_TYPE pLhs[], const CYISharedArray< YI_R_ARRAY_TYPE > &rRhs)
 
template<typename YI_L_ARRAY_TYPE , typename YI_R_ARRAY_TYPE >
bool operator== (const CYISharedArray< YI_L_ARRAY_TYPE > &rLhs, const CYIWeakArray< YI_R_ARRAY_TYPE > &rRhs)
 
template<typename YI_L_ARRAY_TYPE , typename YI_R_ARRAY_TYPE >
bool operator!= (const CYISharedArray< YI_L_ARRAY_TYPE > &rLhs, const CYIWeakArray< YI_R_ARRAY_TYPE > &rRhs)
 
template<typename YI_L_ARRAY_TYPE , typename YI_R_ARRAY_TYPE >
bool operator== (const CYIWeakArray< YI_L_ARRAY_TYPE > &rLhs, const CYISharedArray< YI_R_ARRAY_TYPE > &rRhs)
 
template<typename YI_L_ARRAY_TYPE , typename YI_R_ARRAY_TYPE >
bool operator!= (const CYIWeakArray< YI_L_ARRAY_TYPE > &rLhs, const CYISharedArray< YI_R_ARRAY_TYPE > &rRhs)
 
template<typename YI_L_PTR_TYPE , typename YI_R_PTR_TYPE >
bool operator== (const CYIWeakArray< YI_L_PTR_TYPE > &rLhs, const YI_R_PTR_TYPE *pRhs)
 
template<typename YI_L_PTR_TYPE , typename YI_R_PTR_TYPE >
bool operator!= (const CYIWeakArray< YI_L_PTR_TYPE > &rLhs, const YI_R_PTR_TYPE *pRhs)
 
template<typename YI_L_PTR_TYPE , typename YI_R_PTR_TYPE >
bool operator== (const YI_L_PTR_TYPE *pLhs, const CYIWeakArray< YI_R_PTR_TYPE > &rRhs)
 
template<typename YI_L_PTR_TYPE , typename YI_R_PTR_TYPE >
bool operator!= (const YI_L_PTR_TYPE *pLhs, const CYIWeakArray< YI_R_PTR_TYPE > &rRhs)
 

Function Documentation

template<typename YI_L_ARRAY_TYPE , typename YI_R_ARRAY_TYPE >
bool operator!= ( const CYISharedArray< YI_L_ARRAY_TYPE > &  rLhs,
const CYIWeakArray< YI_R_ARRAY_TYPE > &  rRhs 
)
inline
template<typename YI_L_ARRAY_TYPE , typename YI_R_ARRAY_TYPE >
bool operator!= ( const CYIWeakArray< YI_L_ARRAY_TYPE > &  rLhs,
const CYISharedArray< YI_R_ARRAY_TYPE > &  rRhs 
)
inline
template<typename YI_L_PTR_TYPE , typename YI_R_PTR_TYPE >
bool operator!= ( const CYIWeakArray< YI_L_PTR_TYPE > &  rLhs,
const YI_R_PTR_TYPE *  pRhs 
)
inline
template<typename YI_L_ARRAY_TYPE , typename YI_L_DELETE_FUNCTOR , typename YI_R_ARRAY_TYPE , typename YI_R_DELETE_FUNCTOR >
bool operator!= ( const CYIScopedArray< YI_L_ARRAY_TYPE, YI_L_DELETE_FUNCTOR > &  rLhs,
const CYIScopedArray< YI_R_ARRAY_TYPE, YI_R_DELETE_FUNCTOR > &  rRhs 
)
inline
template<typename YI_L_PTR_TYPE , typename YI_R_PTR_TYPE >
bool operator!= ( const YI_L_PTR_TYPE *  pLhs,
const CYIWeakArray< YI_R_PTR_TYPE > &  rRhs 
)
inline
template<typename YI_L_ARRAY_TYPE , typename YI_L_DELETE_FUNCTOR , typename YI_R_ARRAY_TYPE >
bool operator!= ( const CYIScopedArray< YI_L_ARRAY_TYPE, YI_L_DELETE_FUNCTOR > &  rLhs,
const YI_R_ARRAY_TYPE  pRhs[] 
)
inline
template<typename YI_L_ARRAY_TYPE , typename YI_R_ARRAY_TYPE , typename YI_R_DELETE_FUNCTOR >
bool operator!= ( const YI_L_ARRAY_TYPE  pLhs[],
const CYIScopedArray< YI_R_ARRAY_TYPE, YI_R_DELETE_FUNCTOR > &  rRhs 
)
inline
template<typename YI_L_ARRAY_TYPE , typename YI_R_ARRAY_TYPE >
bool operator!= ( const CYISharedArray< YI_L_ARRAY_TYPE > &  rLhs,
const CYISharedArray< YI_R_ARRAY_TYPE > &  rRhs 
)
inline
template<typename YI_L_PTR_TYPE , typename YI_L_DELETE_FUNCTOR , typename YI_R_PTR_TYPE , typename YI_R_DELETE_FUNCTOR >
bool operator!= ( const CYICowPtr< YI_L_PTR_TYPE, YI_L_DELETE_FUNCTOR > &  rLhs,
const CYICowPtr< YI_R_PTR_TYPE, YI_R_DELETE_FUNCTOR > &  rRhs 
)
inline
template<typename YI_L_ARRAY_TYPE , typename YI_R_PTR_TYPE >
bool operator!= ( const CYISharedArray< YI_L_ARRAY_TYPE > &  rLhs,
const CYISharedPtr< YI_R_PTR_TYPE > &  rRhs 
)
inline
template<typename YI_L_PTR_TYPE , typename YI_L_DELETE_FUNCTOR , typename YI_R_PTR_TYPE >
bool operator!= ( const CYICowPtr< YI_L_PTR_TYPE, YI_L_DELETE_FUNCTOR > &  rLhs,
const YI_R_PTR_TYPE *  pRhs 
)
inline
template<typename YI_L_PTR_TYPE , typename YI_R_ARRAY_TYPE >
bool operator!= ( const CYISharedPtr< YI_L_PTR_TYPE > &  rLhs,
const CYISharedArray< YI_R_ARRAY_TYPE > &  rRhs 
)
inline
template<typename YI_L_PTR_TYPE , typename YI_R_PTR_TYPE , typename YI_R_DELETE_FUNCTOR >
bool operator!= ( const YI_L_PTR_TYPE *  pLhs,
const CYICowPtr< YI_R_PTR_TYPE, YI_R_DELETE_FUNCTOR > &  rRhs 
)
inline
template<typename YI_L_ARRAY_TYPE , typename YI_R_PTR_TYPE >
bool operator!= ( const CYISharedArray< YI_L_ARRAY_TYPE > &  rLhs,
const CYIWeakPtr< YI_R_PTR_TYPE > &  rRhs 
)
inline
template<typename YI_L_PTR_TYPE , typename YI_R_ARRAY_TYPE >
bool operator!= ( const CYIWeakPtr< YI_L_PTR_TYPE > &  rLhs,
const CYISharedArray< YI_R_ARRAY_TYPE > &  rRhs 
)
inline
template<typename YI_L_ARRAY_TYPE , typename YI_R_ARRAY_TYPE >
bool operator!= ( const CYISharedArray< YI_L_ARRAY_TYPE > &  rLhs,
const YI_R_ARRAY_TYPE  pRhs[] 
)
inline
template<typename YI_L_ARRAY_TYPE , typename YI_R_ARRAY_TYPE >
bool operator!= ( const YI_L_ARRAY_TYPE  pLhs[],
const CYISharedArray< YI_R_ARRAY_TYPE > &  rRhs 
)
inline
template<typename YI_L_PTR_TYPE , typename YI_L_DELETE_FUNCTOR , typename YI_R_PTR_TYPE , typename YI_R_DELETE_FUNCTOR >
bool operator!= ( const CYIScopedPtr< YI_L_PTR_TYPE, YI_L_DELETE_FUNCTOR > &  rLhs,
const CYIScopedPtr< YI_R_PTR_TYPE, YI_R_DELETE_FUNCTOR > &  rRhs 
)
inline
template<typename YI_L_PTR_TYPE , typename YI_L_DELETE_FUNCTOR , typename YI_R_PTR_TYPE >
bool operator!= ( const CYIScopedPtr< YI_L_PTR_TYPE, YI_L_DELETE_FUNCTOR > &  rLhs,
const YI_R_PTR_TYPE *  pRhs 
)
inline
template<typename YI_L_PTR_TYPE , typename YI_R_PTR_TYPE , typename YI_R_DELETE_FUNCTOR >
bool operator!= ( const YI_L_PTR_TYPE *  pLhs,
const CYIScopedPtr< YI_R_PTR_TYPE, YI_R_DELETE_FUNCTOR > &  rRhs 
)
inline
template<typename YI_L_ARRAY_TYPE , typename YI_R_ARRAY_TYPE >
bool operator== ( const CYISharedArray< YI_L_ARRAY_TYPE > &  rLhs,
const CYIWeakArray< YI_R_ARRAY_TYPE > &  rRhs 
)
inline
template<typename YI_L_ARRAY_TYPE , typename YI_R_ARRAY_TYPE >
bool operator== ( const CYIWeakArray< YI_L_ARRAY_TYPE > &  rLhs,
const CYISharedArray< YI_R_ARRAY_TYPE > &  rRhs 
)
inline
template<typename YI_L_PTR_TYPE , typename YI_R_PTR_TYPE >
bool operator== ( const CYIWeakArray< YI_L_PTR_TYPE > &  rLhs,
const YI_R_PTR_TYPE *  pRhs 
)
inline
template<typename YI_L_ARRAY_TYPE , typename YI_L_DELETE_FUNCTOR , typename YI_R_ARRAY_TYPE , typename YI_R_DELETE_FUNCTOR >
bool operator== ( const CYIScopedArray< YI_L_ARRAY_TYPE, YI_L_DELETE_FUNCTOR > &  rLhs,
const CYIScopedArray< YI_R_ARRAY_TYPE, YI_R_DELETE_FUNCTOR > &  rRhs 
)
inline
template<typename YI_L_PTR_TYPE , typename YI_R_PTR_TYPE >
bool operator== ( const YI_L_PTR_TYPE *  pLhs,
const CYIWeakArray< YI_R_PTR_TYPE > &  rRhs 
)
inline
template<typename YI_L_ARRAY_TYPE , typename YI_L_DELETE_FUNCTOR , typename YI_R_ARRAY_TYPE >
bool operator== ( const CYIScopedArray< YI_L_ARRAY_TYPE, YI_L_DELETE_FUNCTOR > &  rLhs,
const YI_R_ARRAY_TYPE  pRhs[] 
)
inline
template<typename YI_L_ARRAY_TYPE , typename YI_R_ARRAY_TYPE , typename YI_R_DELETE_FUNCTOR >
bool operator== ( const YI_L_ARRAY_TYPE  pLhs[],
const CYIScopedArray< YI_R_ARRAY_TYPE, YI_R_DELETE_FUNCTOR > &  rRhs 
)
inline
template<typename YI_L_ARRAY_TYPE , typename YI_R_ARRAY_TYPE >
bool operator== ( const CYISharedArray< YI_L_ARRAY_TYPE > &  rLhs,
const CYISharedArray< YI_R_ARRAY_TYPE > &  rRhs 
)
inline
template<typename YI_L_PTR_TYPE , typename YI_L_DELETE_FUNCTOR , typename YI_R_PTR_TYPE , typename YI_R_DELETE_FUNCTOR >
bool operator== ( const CYICowPtr< YI_L_PTR_TYPE, YI_L_DELETE_FUNCTOR > &  rLhs,
const CYICowPtr< YI_R_PTR_TYPE, YI_R_DELETE_FUNCTOR > &  rRhs 
)
inline
template<typename YI_L_ARRAY_TYPE , typename YI_R_PTR_TYPE >
bool operator== ( const CYISharedArray< YI_L_ARRAY_TYPE > &  rLhs,
const CYISharedPtr< YI_R_PTR_TYPE > &  rRhs 
)
inline
template<typename YI_L_PTR_TYPE , typename YI_L_DELETE_FUNCTOR , typename YI_R_PTR_TYPE >
bool operator== ( const CYICowPtr< YI_L_PTR_TYPE, YI_L_DELETE_FUNCTOR > &  rLhs,
const YI_R_PTR_TYPE *  pRhs 
)
inline
template<typename YI_L_PTR_TYPE , typename YI_R_ARRAY_TYPE >
bool operator== ( const CYISharedPtr< YI_L_PTR_TYPE > &  rLhs,
const CYISharedArray< YI_R_ARRAY_TYPE > &  rRhs 
)
inline
template<typename YI_L_PTR_TYPE , typename YI_R_PTR_TYPE , typename YI_R_DELETE_FUNCTOR >
bool operator== ( const YI_L_PTR_TYPE *  pLhs,
const CYICowPtr< YI_R_PTR_TYPE, YI_R_DELETE_FUNCTOR > &  rRhs 
)
inline
template<typename YI_L_ARRAY_TYPE , typename YI_R_PTR_TYPE >
bool operator== ( const CYISharedArray< YI_L_ARRAY_TYPE > &  rLhs,
const CYIWeakPtr< YI_R_PTR_TYPE > &  rRhs 
)
inline
template<typename YI_L_PTR_TYPE , typename YI_R_ARRAY_TYPE >
bool operator== ( const CYIWeakPtr< YI_L_PTR_TYPE > &  rLhs,
const CYISharedArray< YI_R_ARRAY_TYPE > &  rRhs 
)
inline
template<typename YI_L_ARRAY_TYPE , typename YI_R_ARRAY_TYPE >
bool operator== ( const CYISharedArray< YI_L_ARRAY_TYPE > &  rLhs,
const YI_R_ARRAY_TYPE  pRhs[] 
)
inline
template<typename YI_L_ARRAY_TYPE , typename YI_R_ARRAY_TYPE >
bool operator== ( const YI_L_ARRAY_TYPE  pLhs[],
const CYISharedArray< YI_R_ARRAY_TYPE > &  rRhs 
)
inline
template<typename YI_L_PTR_TYPE , typename YI_L_DELETE_FUNCTOR , typename YI_R_PTR_TYPE , typename YI_R_DELETE_FUNCTOR >
bool operator== ( const CYIScopedPtr< YI_L_PTR_TYPE, YI_L_DELETE_FUNCTOR > &  rLhs,
const CYIScopedPtr< YI_R_PTR_TYPE, YI_R_DELETE_FUNCTOR > &  rRhs 
)
inline
template<typename YI_L_PTR_TYPE , typename YI_L_DELETE_FUNCTOR , typename YI_R_PTR_TYPE >
bool operator== ( const CYIScopedPtr< YI_L_PTR_TYPE, YI_L_DELETE_FUNCTOR > &  rLhs,
const YI_R_PTR_TYPE *  pRhs 
)
inline
template<typename YI_L_PTR_TYPE , typename YI_R_PTR_TYPE , typename YI_R_DELETE_FUNCTOR >
bool operator== ( const YI_L_PTR_TYPE *  pLhs,
const CYIScopedPtr< YI_R_PTR_TYPE, YI_R_DELETE_FUNCTOR > &  rRhs 
)
inline
template<typename YI_PTR_TYPE >
void YI_CHECKED_ARRAY_DELETE ( YI_PTR_TYPE  pArray[])

An array delete function that produces a compile-time error if called on an incomplete type.

Example:

1 class MyArrayType;
2 
3 void MyFunction(MyArrayType *pArrayType)
4 {
5  //delete[] pArrayType; // this would result in undefined behaviour
6  YI_CHECKED_ARRAY_DELETE(pArrayType); // this would result in a compile-time error instead
7 }
template<typename YI_PTR_TYPE >
void YI_CHECKED_DELETE ( YI_PTR_TYPE *  pPtr)

A delete function that produces a compile-time error if called on an incomplete type.

Example:

1 class MyType;
2 
3 void MyFunction(MyType *pType)
4 {
5  //delete pType; // this would result in undefined behaviour
6  YI_CHECKED_DELETE(pType); // this would result in a compile-time error instead
7 }