Inst()
이라는 개인 정적 메서드가 있다고 가정하면 클래스는 정적 메서드로 응용 프로그램에서 자체의 단일 인스턴스를 검색 할 수 있습니다. 어쩌면 INST()가 정의되어 뭔가 같은 ..로컬에서 저장하는 것과 비교하여 개체 검색의 오버 헤드
return App::GetApp()->CurrentState()->MyClass(); // Inst returns a reference
는 성능이 매우 중요 응용 프로그램에서 ...
// I prefer this
Inst().DoThis();
Inst().DoThat();
Inst().DoFoo();
에 ...
MyClass inst = Inst();
inst.DoThis();
inst.DoThat();
inst.DoFoo();
을 비교해이다 함수의 첫 번째 집합에서 오버 헤드가 아닌가? 현대 컴파일러가 이러한 것들을 최적화 할 수 있습니까?
내 경우에는 프로파일 링이 내 질문에 대한 답을 얻을 수 있지만 필자는 여기에서 엄지 손가락 법칙을 찾고 있습니다. 기존 데이터를 다시 검색하지 않고 로컬 변수에 저장하는 것이 얼마나 효과적입니까, 아니면 현대 컴파일러에서 일반적으로 최적화 된 다시 검색입니까?
예가 다릅니다. 첫 번째 버전은 다른 버전이 사본을 만드는 참조에서 함수를 호출합니다. – pmr
감사합니다. 참조에 지정하면 사본이 작성된다는 사실을 알지 못했습니다. (비록 컴파일러가 그것을 잡았을 것이기 때문에 나는 실제로 클래스의 복사 생성자와 할당을 제한했지만). – kroz
그렇지 않습니다. 그러나 당신은 _reference_ ('MyClass & inst')에 할당하지 않지만, 당신은 복사 생성자 ('MyClass inst (const MyClass &)')로 새로운'MyClass'를 초기화하고 있습니다. –