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 Devaura | 2008/07/24 10:51 | Dairy Floating | 트랙백 | 덧글(0)

트랙백 주소 : http://devaura.egloos.com/tb/617750
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글

◀ 이전 페이지다음 페이지 ▶