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); //멤버변수 복사
}
복사 생성자를 정의해야만 하는 경우
디폴트 복사 생성자도 멤버 변수를 복사해 줍니다. 하지만 멤버에 포인터 변수를 포함할 경우 다음과 같은 문제가 발생합니다.
같은 곳을 가리키게 되어서 둘 중 하나를 삭제하면 다 날라가는 경우 등이 생김
'컴퓨터 과학 & 영상처리 관련 > C / C++' 카테고리의 다른 글
상속(inheritance) (0) | 2012.07.10 |
---|---|
friend (0) | 2012.07.10 |
new/delete 연산자의 응용 (0) | 2012.07.10 |
실인수와 가인수, 별명;참조(&) (0) | 2012.07.10 |
인라인 함수 (0) | 2012.07.10 |