Smart Object
juhgiyo edited this page Jul 6, 2012
·
6 revisions
#include "epl.h"
using namespace epl;
class SomeClass : public SmartObject
{
public:
SomeClass():SmartObject()
{
//Initialization
...
}
SomeClass(const SomeClass& b):SmartObject(b)
{
//Initialization by copying
...
}
virtual ~SomeClass();
...
};
SomeClass *someClass = new SomeClass(); // reference count = 1
...
delete someClass; // deletion (Only allowed when reference count is 1)
void SomeFunc(SomeClass *sClass)
{
sClass->RetainObj(); // reference count = 2
...
sClass->ReleaseObj(); // reference count = 1
}
...
void SomeOtherFunc()
{
SomeClass *someClass = new SomeClass(); // reference count = 1
SomeFunc(someClass);
someClass->ReleaseObj(); // reference count = 0, and auto-released
}
SomeClass *someClass = new SomeClass(); // reference count = 1
someClass->RetainObj(); // reference count = 2
...
someClass->ReleaseObj(); // reference count = 1
delete someClass; // deletion (Only allowed when reference count is 1)
void SomeFunc(SomeClass *sClass)
{
sClass->RetainObj(); // reference count = 3
...
sClass->ReleaseObj(); // reference count = 2
}
...
SomeClass *someClass = new SomeClass(); // reference count = 1
someClass->RetainObj(); // reference count = 2
SomeFunc(someClass);
someClass->ReleaseObj(); // reference count = 1
someClass->ReleaseObj(); // reference count = 0, and auto-release