2011. 3. 7. 17:32
아래와 같이 변수를 동적할당 해 줄 경우,
명시적으로 복사생성자를 정의해 주어야 한다.
=>생성자 내에서 동적할당을 하면 반드시 제공해야 하는 것은 소멸자이다. 소멸자가 있어야 메모리 누수(유출)이 발생하지 않는다.
뿐만 아니라 복사 생성자도 정의해야 한다. 그래서 메모리 참조를 막을 수 있다.

 #include <iostream>
using std::cout;
using std::cin;
using std::endl;

class Person
{
 char *name;
 char *phone;
 int age;
public:
 Person(char* _name, char* _phone, int _age);
 Person(const Person& p);
 ~Person();
 void ShowData();
};
Person::Person(char* _name, char* _phone, int _age)
{
 name = new char[strlen(_name)+1];
 strcpy(name, _name);
 phone = new char[strlen(_phone)+1];
 strcpy(phone, _phone);
 age = _age;
}

Person::Person(const Person& p)

 name = new char[strlen(p.name)+1];
 strcpy(name, p.name);
 phone = new char[strlen(p.phone)+1];
 strcpy(phone, p.phone);
 age = p.age;
}

Person::~Person()
{
 delete[] name;
 delete[] phone;
}
void Person::ShowData()
{
 cout<<"name : "<<name<<endl;
 cout<<"phone: "<<phone<<endl;
 cout<<"age  : "<<age<<endl;
}
int main()
{
 Person p1("KIM", "013-333-5555", 22);
 Person p2=p1; //Person p2(p1);
 return 0;
}


'Language > C++' 카테고리의 다른 글

멤버 이니셜라이저의 필요성 _const 멤버 변수를 초기화  (0) 2011.03.07
복사생성자가 호출되는 시점  (0) 2011.03.07
객체 포인터 배열  (0) 2011.03.04
생성자와 동적할당  (0) 2011.03.04
new / delete  (0) 2011.03.03
Posted by Triany