본문 바로가기

컴퓨터 과학 & 영상처리 관련/C / C++

복사생성자

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