#pragma once
class AutoRelease
{
public:
AutoRelease(void){ m_count = 0; }
virtual ~AutoRelease(void){}
AutoRelease* GetPointClone()
{
++m_count;
return this;
}
void Release()
{
m_count = m_count - 1;
if( m_count <= 0)
delete this;
} private:
long m_count;
};
#include <iostream>
#include "AutoRelease.h" using namespace std; class A:public AutoRelease
{
}; void main()
{
A* pa = (A*)((new A())->GetPointClone());
pa->Release();
system("pause");
}