블로그 이미지
공부할 때 정리 장소로 쓰거나 웹서핑할때 메모 할 때 쓰거나, 개인적인 생각을 기록하기 위해서 사용 되는 블로그 입니다.
최익필

Recent Comment

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

무조건 다 복사해주겠는데, 주의해야 할 점은 무엇이 있어?
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 농사를 짓는 게임 프로그래머 최익필

Trackback http://ikpil.com/trackback/414 관련글 쓰기

  1. 항목 12. 객체의 모든 부분을 빠짐없이 복사하자.  삭제

    2009/02/17 14:59 | Tracked from 데비악닷컴 ( deviAk.Com )

    내용 객체의 안쪽 부분을 캡슐화한 객체 지향 시스템 중 설계가 잘 된 것들을 보면, 객체를 복사 하는 함수가 딱 두개만 있는 것을 볼 수 있다. 이 둘을 복사 생성자와 복사 대입 연산자라 하고, 이 둘을 통틀어 객체 복사 함수(copying function)라 부른다. 컴파일러가 생성한 복사 함수는 기본적인 요구에 충실하다. 복사되는 객체가 갖고 있는 데이터를 빠짐없이 복사한다. 주의점 만약 컴파일러가 만든 기본 동작에 마음에 안들어 직접 복사 함수..

댓글을 달아 주세요