컴퓨터 과학 & 영상처리 관련/C / C++
복사생성자
꺄뜨르
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); //멤버변수 복사
}
복사 생성자를 정의해야만 하는 경우
디폴트 복사 생성자도 멤버 변수를 복사해 줍니다. 하지만 멤버에 포인터 변수를 포함할 경우 다음과 같은 문제가 발생합니다.
같은 곳을 가리키게 되어서 둘 중 하나를 삭제하면 다 날라가는 경우 등이 생김