2008년 07월 24일
effective
[항목.5]컴파일러가 만드는 함수들을 주의하자.
► 컴파일러는 기본적으로 복사생성자, 복사 대입연산자를 선언하지 않고 외부에서 호출할 경우 자동으로public 선언을 한다.
► 참조자를 멤버로 갖고 있는클래스에 대입연산을 지원하려면 직접 복사 대입연산자를 정의해 주어야 한다.
ex)
classDev{
public:
string&m_strName;
}
Deva;
Devb;
a= b;
컴파일 에러 :C++참조자는 원래 자신이 참조하고 있는 것과 다른객체를 참조할수 없다.
► 상수 멤버에 대해서도 위와같은 동작을 한다.
[항목.6]컴파일러가만들어낸 함수가 필요 없으면 확실히 이들의 사용을막자.
► 컴파일러는 복사 생성자,복사 대입 연산자를 자동으로 public선언을할수 있다.
그러므로,해당 클래스에 대해서 복사관련 작업을 막고싶다면, 직접Private로 선언하자.
► 하지만 위와 같이 할경우 또하나의 문제는 멤버로써 호출을 하거나,friend 함수가 호출될수 있다....그래서선언만 하되 정의는 하지 않는 방법이 있다.
ex)
classDev{
private:
Dev(constDev&);
Dev&operator=(const Dev&);
}
► 더좋은 방법 :링크시의 에러를 컴파일시로 옮겨보자..에러를빨리 잡자..
ex)
classUnCopy{
procted:
UnCopy(){}
~UnCopy(){}
private:
UnCopy(constUnCopy&);
UnCopy&operator=(const UnCopy&);
}
classDev : private UnCopy{ ... }
► 위와 같이 기본 클래스를상속하여서 사용한다면......멤버로써호출이 안 된다.
# by | 2008/07/24 10:51 | Dairy Floating | 트랙백 | 덧글(0)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]