빠짐없이 복사 안하면 어떻게 될까?
... 얼토당도 안되는 질문이지만, 복사한다는 의미를 모든것을 복사한다고 정의 내려, 모든 사람들이 이 규칙을 따른다면, 다른 사람이 만든 코드를 볼때라든지, 복사를 한다고 했을때의 연산등을 정확하게 알수 있는 장점이 있다.
(여담으로 컴파일러가 만들어주는 복사 생성자나 대입연산자들은 .. 이 규칙을 따라 엄격하게 복사만해준다.)
무조건 다 복사해주겠는데, 주의해야 할 점은 무엇이 있어?
1. 기존의 클래스에서 멤버를 추가하려 할때, 복사생성자, 대입 연산자 들을 수정해야 한다.
2. 포인터 멤버 변수일때, 깊은 복사를 해야 하는지 얕은 복사만을 해야 하는지 염두해두어야 한다.
3. 파생 클래스에서 베이스 클래스의 복사생성자와 파생 클래스의 대입연산자도 수정해야 한다.
(파생 클래스에서 베이스 클래스의 복사 생성자와 대입연산자를 호출해 주지 않기 때문이다.)
3번, 파생 클래스에서 어떻게 베이스 클래스의 멤버 변수까지 복사 하는가?
파생 클래스의 복사 생성자의 초기화 리스트에 베이스 클래스의 복사 생성자를 호출하고,
파생 클래스의 대입 연산자의 내부에서는 베이스클래스의 대입 연산자를 호출 하면 된다!
복사 생성자와 대입연산자는 const CBabo& rhs 식의 참조자 매개변수를 띠기 때문에, 슬라이스(Slice) 문제가 있어, 파생 클래스의 복사 생성자와 대입 연산자는 정의 부분에 파생 클래스 부분만을 복사하는 것을 꼭 넣어야 한다.
이것만은 잊지 말자
1. 객체 복사 함수는 객체의 모든것을 복사 해야 한다!
2. 대입 연산자에서 복사 생성자를 호출하는 방법, 복사 생성자에서 대입 연산자를 호출하는 방법은 쓰지말자!
관련 코드
관련링크
레드 위키~ 위키~
http://kldp.org/node/78631
http://rookiecj.tistory.com/8
http://ikpil.tistory.com/298
... 얼토당도 안되는 질문이지만, 복사한다는 의미를 모든것을 복사한다고 정의 내려, 모든 사람들이 이 규칙을 따른다면, 다른 사람이 만든 코드를 볼때라든지, 복사를 한다고 했을때의 연산등을 정확하게 알수 있는 장점이 있다.
(여담으로 컴파일러가 만들어주는 복사 생성자나 대입연산자들은 .. 이 규칙을 따라 엄격하게 복사만해준다.)
무조건 다 복사해주겠는데, 주의해야 할 점은 무엇이 있어?
1. 기존의 클래스에서 멤버를 추가하려 할때, 복사생성자, 대입 연산자 들을 수정해야 한다.
2. 포인터 멤버 변수일때, 깊은 복사를 해야 하는지 얕은 복사만을 해야 하는지 염두해두어야 한다.
3. 파생 클래스에서 베이스 클래스의 복사생성자와 파생 클래스의 대입연산자도 수정해야 한다.
(파생 클래스에서 베이스 클래스의 복사 생성자와 대입연산자를 호출해 주지 않기 때문이다.)
3번, 파생 클래스에서 어떻게 베이스 클래스의 멤버 변수까지 복사 하는가?
파생 클래스의 복사 생성자의 초기화 리스트에 베이스 클래스의 복사 생성자를 호출하고,
파생 클래스의 대입 연산자의 내부에서는 베이스클래스의 대입 연산자를 호출 하면 된다!
복사 생성자와 대입연산자는 const CBabo& rhs 식의 참조자 매개변수를 띠기 때문에, 슬라이스(Slice) 문제가 있어, 파생 클래스의 복사 생성자와 대입 연산자는 정의 부분에 파생 클래스 부분만을 복사하는 것을 꼭 넣어야 한다.
이것만은 잊지 말자
1. 객체 복사 함수는 객체의 모든것을 복사 해야 한다!
2. 대입 연산자에서 복사 생성자를 호출하는 방법, 복사 생성자에서 대입 연산자를 호출하는 방법은 쓰지말자!
관련 코드
관련링크
레드 위키~ 위키~
http://kldp.org/node/78631
http://rookiecj.tistory.com/8
http://ikpil.tistory.com/298
'책 정리 > Effective C++ 3판' 카테고리의 다른 글
항목 17: new로 생성한 객체를 스마트 포인터에 저장하는 코드는 별도의 한 문장으로 만들자 (0) | 2008.06.03 |
---|---|
항목 16: new 및 delete를 사용할 때는 형태를 반드시 맞추자 (0) | 2008.06.03 |
항목 15: 자원 관리 클래스에서 관리되는 자원은 외부에서 접근할 수 있도록 하자. (0) | 2008.06.02 |
항목 14: 자원 관리 클래스의 복사 동작에 대해 진지하게 고찰하자 (0) | 2008.06.01 |
항목 13: 자원 관리에는 객체가 그만! (0) | 2008.06.01 |
항목 11: operator=에서는 자기대입에 대한 처리가 빠지지 않도록 하자 (0) | 2008.06.01 |
항목 10: 대입 연산자는 *this의 참조자를 반환하게 하자. (0) | 2008.05.31 |
항목 9: 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자 (0) | 2008.05.31 |
항목 8: 예외가 소멸자를 떠나지 못하도록 붙들어 놓자. (0) | 2008.05.31 |
항목 7: 다향성을 가진 기본 클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자 (0) | 2008.05.31 |
최근댓글