클래스를 설계하고 구현하다보면 항상 의문시 되는 점이 있습니다. 모든 클래스에 복사생성자, 대입연산자를 꼭 구현해야할까?
제 생각은 이렇습니다. 1. 데이터멤버에 포인터변수를 가지고 있지 않으면 굳이 두 연산을 구현할 필요가 없다.
2. 클래스가 ADT가 아니라면.. 즉 클래스간에 대입하는 일이 발생하지 않는 클래스라면 굳이 구현할 필요가 없다.
어떻게 생각하시나요? 아낌없는 조언 부탁드립니다.
하지 않는것이 기본입니다. 저의 경우에는 클래스를 생성하면 기본적으로
class ClassName { private: ClassName(const ClassName&); ClassName& operator= (const ClassName&); };
을 자동으로 넣고 시작합니다. 필요하지 않으면 실수로라도 호출되지 않도록합니다.
지금 필요하지 않더라도 언제가는 이런 실수를 하게 될 수도 있지 않을까요? 그때가서 만들면 되겠다는 생각이 들 수도 있지만, 미리 호출되지 않도록 정의 해 놓는다면 나중에 쉽게 오류를 찾아낼 수 있을것 같습니다.
사실 언제 복사가 일어나는 알수 없는 경우도 있는데, 좋은방법같습니다. 이 경우에는 만일 복사가 일어나야 하는 상황이라면 링크에러가 나서 결과적으로 의도를 정확히 알 수 있겠군요..
훌륭한 방법같습니다. poklog at http://poksion.cafe24.com/poklog/
poklog at http://poksion.cafe24.com/poklog/
하지 않는것이
하지 않는것이 기본입니다. 저의 경우에는 클래스를 생성하면 기본적으로
class ClassName
{
private:
ClassName(const ClassName&);
ClassName& operator= (const ClassName&);
};
을 자동으로 넣고 시작합니다. 필요하지 않으면 실수로라도 호출되지 않도록합니다.
저도 같은 생각입니다.
지금 필요하지 않더라도 언제가는 이런 실수를 하게 될 수도 있지 않을까요?
그때가서 만들면 되겠다는 생각이 들 수도 있지만,
미리 호출되지 않도록 정의 해 놓는다면
나중에 쉽게 오류를 찾아낼 수 있을것 같습니다.
좋군요..
사실 언제 복사가 일어나는 알수 없는 경우도 있는데, 좋은방법같습니다.
이 경우에는 만일 복사가 일어나야 하는 상황이라면 링크에러가 나서 결과적으로 의도를 정확히 알 수 있겠군요..
훌륭한 방법같습니다.
poklog at http://poksion.cafe24.com/poklog/
poklog at http://poksion.cafe24.com/poklog/