#include<iostream>
using namespace std;
class ObjBase
{
public:
int *pi; //数据
size_t* use; //计数器
ObjBase()
{
cout << "U_ptr constructor called !" << endl;
}
~ObjBase()
{
cout << "U_ptr distructor called !" << endl;
}
};
class Inherit:public ObjBase
{
public:
Inherit(int* p)
{
pi = p;
use = new size_t(1);
cout << "HasPtr constructor called ! " << "use = " <<*use << endl;
}
Inherit(const Inherit& orig)
{
pi = orig.pi;
use = orig.use;
++*use;
cout << "Inherit constructor called ! " << "use = " << *use << endl;
}
Inherit& operator=(const Inherit& rhs)
{
++*rhs.use;
if (--*use == 0)
{
delete use;
delete pi;
}
use = rhs.use;
pi = rhs.pi;
return *this;
}
~Inherit()
{
cout << "Inherit distructor called ! " << "use = " <<*use << endl;
if (--*use == 0)
{
delete pi;
delete use;
}
}
};
int main(void)
{
int *pi = new int(42); //一个数据
Inherit *hpA = new Inherit(pi);
Inherit* hpB = new Inherit(*hpA);
Inherit* hpC = new Inherit(*hpA);
Inherit* hpD = new Inherit(*hpB);
int *pi2 = new int(42); //一个数据
Inherit* hpE = new Inherit(pi2);
*hpE = *hpA;
delete hpA;
delete hpB;
delete hpC;
delete hpD;
delete hpE;
return 0;
}