I am a beginner in Cocoa framework and have a question:
Suppose I don't use "naked" NS-pointers in my application, is ARC superfluous for me then ? :-)
In other words, does the following implementation cover all of ARC's concerns ? :-)
Thank you !
First (result accumulation of "alloc..", "new..", "copy.." or "mutableCopy.."):
#pragma once
// In-Ref(NOP), Out-Ref(--)
template<typename T>
class NSChargePtr
{
NSChargePtr(const NSChargePtr&) = delete;
protected:
T* m_object{};
public:
NSChargePtr(T* p = __nullptr)
: m_object(p)
{
}
virtual ~NSChargePtr()
{
[m_object release];
}
operator T*()
{
return m_object;
}
operator bool()
{
return __nullptr != m_object;
}
void operator=(T* p)
{
reset(p);
}
T* get()
{
return m_object;
}
virtual void reset(T* p = __nullptr)
{
[m_object release];
m_object = p;
}
};
...and second (local keeping, transfer):
#pragma once
#include "NSChargePtr.h"
// In-Ref(++), Out-Ref(--)
template<typename T>
class NSPassPtr : public NSChargePtr<T>
{
public:
NSPassPtr(T* p = __nullptr)
: NSChargePtr<T>(p)
{
[NSChargePtr<T>::m_object retain];
}
NSPassPtr(const NSPassPtr& other)
: NSChargePtr<T>(other.m_object)
{
}
virtual void reset(T* p = __nullptr) override
{
NSChargePtr<T>::reset(p);
[NSChargePtr<T>::m_object retain];
}
void operator=(T* p)
{
NSChargePtr<T>::operator=(p);
}
};