Re: Self deleting class
"Lisa Pearlson" wrote:
can I then simply do this?
CSomeClass* c = NULL;
c = new CSomeClass();
c = new CSomeClass();
What happens when I reassign the valiable to new instance?
Will CSomeClass self-delete itself at that point, or when
application terminates?
Other already answered that you'll get memory leak. It is
because pointer `c' knows nothing about about class'
destructor. Pointer just holds an address to the allocated
memory, that's all.
What you need here is so called "smart pointer". Smart
pointer is a class that wraps raw pointer and ensures the
release of acquired resources. You can implement such smart
pointer class by yourself, for example:
class CSomeClassPtr
{
public:
CSomeClassPtr(CSomeClass* p = NULL) : m_p(p) {}
~CSomeClassPtr() { delete m_p; }
public:
CSomeClass* operator ->()
{ return m_p; }
const CSomeClass* operator ->() const
{ return m_p; }
CSomeClass* operator =(CSomeClass* p)
{
if(p != m_p)
{
delete m_p;
m_p = p;
}
return m_p;
}
private:
CSomeClass* m_p;
};
Then you can use `CSomeClassPtr' instead of raw pointer:
CSomeClassPtr ptr;
ptr = new CSomeClass();
ptr = new CSomeClass();
However, there is similar smart pointer already implemented
in STL - `std::auto_ptr':
typedef std::auto_ptr<CSomeClass> CSomeClassPtr;
CSomeClassPtr p1(new CSomeClass);
CSomeClassPtr p2(new CSomeClass);
....
HTH
Alex