아무래도, 기본 복사생성자는 복사한 후에, 새 new로 할당을 하는 것이 아니라
(new로 할당하는 작업은 "생성자"에 있음을 유의) 그냥 기존 개체가 가지고 있던
주소를 복사해서 새 개체에 넣나 보군요..
윽 생각해보니 멤버변수 자체가 포인터니까 당연한 결과잖아!

이런 완전 바보짓 했습니다 그려.. ㅠ.ㅠ



// 복사생성자

#include <iostream.h>

typedef unsigned short int USHORT;

class CAT
{
public:
        CAT();
        CAT(CAT&);
        ~CAT();
        USHORT GetAge() {return *m_pItsAge;}
        void SetAge(USHORT age) {*m_pItsAge = age;}
        USHORT* Show() {return m_pItsAge;}
private:
        USHORT *m_pItsAge;
};

CAT::CAT()
{
        m_pItsAge = new USHORT(1);
}

CAT::CAT(CAT &foo)
{
        m_pItsAge = new USHORT;
        *m_pItsAge = foo.GetAge();
}

CAT::~CAT()
{
}

int main()
{
        int dump;

        CAT frisky;
        cout << "frisky's age is " << frisky.GetAge() << endl;
        frisky.SetAge(2);
        cout << "friksy's age is " << frisky.GetAge() << endl;

        CAT si(frisky);
        cout << "si- 's age is " << si.GetAge() << endl;
        si.SetAge(3);
        cout << "next year, si- 's age is " << si.GetAge() << endl;
        cout << "but, still frisky's age is " << frisky.GetAge() << " too." << endl;
        cout << "frisky : " << frisky.Show() << " and, si- : " << si.Show() << endl;

        cin >> dump;

        return 0;
}