꺄뜨르 2012. 7. 10. 14:06

Person psn2 = psn1;

이미 존재하는 오브젝트에 별도의 오브젝트를 대입하는 경우는 복사 생성자가 아닌 operator=()라는 멤버 함수가 호출됨 (194쪽 참조-c++가 보이는 그림책)



class Person{

public:

Person();

Person(const Person &psn);  //복사 생성자의 선언

~Person(){

   delete [] name;

}

private:

   char *name;

};

.

..

.

Person::Person(const Person &psn)  //복사 생성자의 정의

{

name = new char[strlen(psn.name) + 1 ];  //메모리 확보

strcpy(name,psn.name); //멤버변수 복사

}



복사 생성자를 정의해야만 하는 경우

디폴트 복사 생성자도 멤버 변수를 복사해 줍니다. 하지만 멤버에 포인터 변수를 포함할 경우 다음과 같은 문제가 발생합니다.

같은 곳을 가리키게 되어서 둘 중 하나를 삭제하면 다 날라가는 경우 등이 생김