빠짐없이 복사 안하면 어떻게 될까?
... 얼토당도 안되는 질문이지만, 복사한다는 의미를 모든것을 복사한다고 정의 내려, 모든 사람들이 이 규칙을 따른다면, 다른 사람이 만든 코드를 볼때라든지, 복사를 한다고 했을때의 연산등을 정확하게 알수 있는 장점이 있다.
(여담으로 컴파일러가 만들어주 복사 생성자나 대입연산자들은 .. 이 규칙을 따라 엄격하게 복사만해준다.)

무조건 다 복사해주겠는데, 주의해야 할 점은 무엇이 있어?
1. 기존의 클래스에서 멤버를 추가하려 할때, 복사생성자, 대입 연산자 들을 수정해야 한다.
2. 포인터 멤버 변수일때, 깊은 복사를 해야 하는지 얕은 복사만을 해야 하는지 염두해두어야 한다.
3. 파생 클래스에서 베이스 클래스의 복사생성자와 파생 클래스의 대입연산자도 수정해야 한다.
(파생 클래스에서 베이스 클래스의 복사 생성자와 대입연산자를 호출해 주지 않기 때문이다.)

3번, 파생 클래스에서 어떻게 베이스 클래스의 멤버 변수까지 복사 하는가?
파생 클래스의 복사 생성자의 초기화 리스트에 베이스 클래스의 복사 생성자를 호출하고,
파생 클래스의 대입 연산자의 내부에서는 베이스클래스의 대입 연산자를 호출 하면 된다!

복사 생성자와 대입연산자는 const CBabo& rhs 식의 참조자 매개변수를 띠기 때문에, 슬라이스(Slice) 문제가 있어, 파생 클래스의 복사 생성자와 대입 연산자는 정의 부분에 파생 클래스 부분만을 복사하는 것을 꼭 넣어야 한다.

이것만은 잊지 말자
1. 객체 복사 함수는 객체의 모든것을 복사 해야 한다!
2. 대입 연산자에서 복사 생성자를 호출하는 방법, 복사 생성자에서 대입 연산자를 호출하는 방법은 쓰지말자!


관련 코드

more..


관련링크
레드 위키~ 위키~
http://kldp.org/node/78631
http://rookiecj.tistory.com/8
http://ikpil.tistory.com/298
posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요