최근에 iPhone 용 개발을 한 끝에 iPhone SDK에서 객체 변경과 관련하여 많이 사용 된 흥미로운 디자인 패턴에 주목했습니다.Objective C 및 C++의 무손실 디자인 패턴
변경 불가능한 클래스 NSFoo
을 정의한 다음 변경 가능 하위 클래스 NSMutableFoo
을 파생시키는 것이 일반적인 방법 인 것처럼 보입니다. 일반적으로 NSFoo
클래스는 데이터 멤버, getter 및 읽기 전용 작업을 정의하며 파생 및 파생 된 파생 된 파서 및 변형 작업을 수행합니다.
C++에 익숙해 졌기 때문에 C++에서 동일한 코드를 작성할 때와 완전히 반대되는 것으로 보입니다. 확실히 수 그 접근 방식을 취할 수 있지만 더 간결한 접근 방식은 하나의 Foo
클래스를 만들고, getters 및 읽기 전용 작업을 const
함수로 표시하고 같은 클래스에서 변경 가능한 연산과 설정자를 구현하는 것으로 보입니다 . 그런 다음 변경 가능한 클래스로 끝나지 만 유형이 Foo const*
, Foo const&
등이 모두 사실상 변경 불가능한 동급 클래스입니다.
제 질문은 내 상황을 이해하는 것이 합리적입니까? Objective-C가 다른 방식으로 동작하는 이유를 이해하지만 C++의 두 가지 클래스 접근 방식에 대해 내가 놓친 이점이 있습니까? 아니면 완전히 그 요점을 놓치고 있습니까?
지나치게 심각한 질문이 아닙니다. 내 호기심에 대한 것보다.
'std :: string'은 COW를 사용하여 복사시 저장할 수 있지만 표준에서 요구하는 것은 아닙니다. COW는 실제로 다중 스레드 환경에서 성능에 영향을 미치기 때문에 아직 구현이 거의 없습니다. –