2010-08-19 4 views

답변

3

클래스가 소유하고있는 멤버 변수로 포인터가있는 경우 (즉, 파괴의 원인이 될 때) 유용합니다. shared_ptr<> 또는 다른 참조 카운트 된 스마트 포인터를 사용하지 않는 한 소멸자에서 포인터를 delete으로 지정해야하므로 클래스를 안전하게 복사하거나 할당 할 수 없습니다. 그러나 클래스의 복사본이 만들어 졌는지 알 수 없으므로 해제 된 포인터의 역 참조에서 이중 삭제 또는 액세스 위반이 발생합니다.

  • 그것은, 즉 자기 문서화 코드를 복사하거나
  • 그것은 클래스 정의보고에서 명확한 의도를하게 할당되는 클래스를 방지 :

    당신이 noncopyable에서 상속하는 경우는 다음 두 가지 장점이 있습니다

예를 들어

class MyClass : boost::noncopyable 
{ 
    ... 
}; 
3

boost의 경우 오른쪽은 boost::noncopyable입니다.

이름과 같이 객체 복사를 방지하는 데 사용됩니다. 복사가 어디에서 처리하기가 매우 어려운 지 알 수 있습니다. 예를 들어, documentation에서 언급 한 것처럼 파일 핸들 또는 네트워크 연결 개념을 래핑하는 클래스가 있습니다. 문제는 리소스 또는 파일을 해제하거나 닫는 데 발생합니다. 당신이 그 (것)들의 많은 사본이있는 경우에 당신은 그것을 어떻게 취급 할 것입니다. 참조 카운팅을 사용할 수는 있지만 핸들을 일부 위치에서 풀면 제대로 처리하기가 어렵습니다.

개인적으로 나는 실제로 단 하나의 패턴을 구현하는 데있어서 가장 명확하고 유용한 사용법을 발견합니다. 하나의 인스턴스,이 경우에 당신은 분명히 복사 가능하기를 원하지 않는다. 싱글 톤은 시스템 구성과 같은 일부 글로벌 리소스를 보유하기 위해 클래스의 인스턴스 하나만 만들 수 있도록 보장합니다.

관련 문제