2016-06-19 3 views
1

나는 const 메소드 묶음이있는 인터페이스를 가지고있다. 인터페이스 구현 중 하나에서 요청 된 정보를 파일에서 읽어야합니다. 예를 들어 here으로 지적했듯이 파일 핸들이 읽기와 함께 변경되기 때문에 실제로 const 연산이 아닙니다.인터페이스 및 파일 읽기의 const 메소드 구현

1) 모든 요청에 ​​임시 파일 핸들을 사용하여

는 기본적으로 내가 알고 있는데 이것에 대해 갈 세 가지 옵션이 있습니다.

2) PIMPL을 사용하십시오.

3) 파일 핸들에 mutable을 사용하십시오.

첫 번째 옵션은 분명히 잔인하며 많은 요청으로 많은 오버 헤드가 추가됩니다. 두 번째 옵션은 간접 참조를 추가하지만 꽤 표준적인 솔루션 인 것으로 보입니다. 그러나 세 번째 옵션은 오버 헤드가없고 간접 참조가 없지만 기본적으로 변경 사항을 확인하기위한 것입니다. PIMPL 관용구가 더 복잡하지만 논란의 여지가없는 방식으로 똑같은 일을하지만.

const 정확성을 저해하지 않으면 서 const 메소드에서 파일 읽기를 수행하는 적절한/선호되는 방법은 무엇입니까?

+0

(3) 예 파일 핸들이 객체의 관찰 가능 상태의 일부가 아닌 경우 –

+0

@RichardCritten 그건 까다로운 부분이지. 파일 핸들은 인터페이스의 일부도 아니고 직접 참조 할 수도 있지만 일단 변경할 수 있으면 const 메소드의 파일에 쓰기가 가능하며 (인터페이스의 const 메소드를 통해) 외부에서 관찰 할 수 있습니다. – Resurrection

답변

1

파일 핸들 개체를 클래스에 직접 넣지 마십시오.

클래스에 RAII 처리를 피하기 위해 일반 포인터가 아니라 std::shared_ptr을 포함하고 있습니다 (const 메소드에서도 사용할 수 있음).

(당신은/파일 핸들에 대하여, 이러한 상황에 대한 올바른 의미를 얻기 위해, 클래스의 복사 생성자 및/또는 할당 연산자에서 뭔가를해야하지 않을 수도 있습니다)

+0

QObject에서 상속하므로 걱정할 복사가 없으므로 std :: unique_ptr을 imho로 사용할 수 있습니다. 제안은 PIMPL의 간접 지정없이 const-correctness를 명확하게 유지하기 때문에 꽤 좋습니다. 그냥 궁금하지만 개체가 그 핸들의 유일한 사용자가 될 경우 변경할 수있는 파일 핸들 개체가 악화되거나 문제가됩니까? – Resurrection

+0

나는 개인적으로 가변 객체를 사용하는 것에 반대하지 않을 것이다. 이것은 단순히 그렇게하지 않는 한 방법입니다. –