C++에서 복사생성자, 대입연산자 재정의를 꼭 해야할까?

곱단오빠의 이미지

클래스를 설계하고 구현하다보면 항상 의문시 되는 점이 있습니다.
모든 클래스에 복사생성자, 대입연산자를 꼭 구현해야할까?

제 생각은 이렇습니다.
1. 데이터멤버에 포인터변수를 가지고 있지 않으면 굳이 두 연산을 구현할 필요가 없다.

2. 클래스가 ADT가 아니라면.. 즉 클래스간에 대입하는 일이 발생하지 않는 클래스라면 굳이 구현할 필요가 없다.

어떻게 생각하시나요? 아낌없는 조언 부탁드립니다.

익명사용자의 이미지

하지 않는것이 기본입니다. 저의 경우에는 클래스를 생성하면 기본적으로

class ClassName
{
private:
ClassName(const ClassName&);
ClassName& operator= (const ClassName&);
};

을 자동으로 넣고 시작합니다. 필요하지 않으면 실수로라도 호출되지 않도록합니다.

김일목의 이미지

지금 필요하지 않더라도 언제가는 이런 실수를 하게 될 수도 있지 않을까요?
그때가서 만들면 되겠다는 생각이 들 수도 있지만,
미리 호출되지 않도록 정의 해 놓는다면
나중에 쉽게 오류를 찾아낼 수 있을것 같습니다.

pok의 이미지

사실 언제 복사가 일어나는 알수 없는 경우도 있는데, 좋은방법같습니다.
이 경우에는 만일 복사가 일어나야 하는 상황이라면 링크에러가 나서 결과적으로 의도를 정확히 알 수 있겠군요..

훌륭한 방법같습니다.


poklog at http://poksion.cafe24.com/poklog/