아무래도, 기본 복사생성자는 복사한 후에, 새 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;
}