... 한 사람이 .h 파일에 모든 코드를 저장하면 메모리 관리 문제가 발생한다고 말했습니다. [...] .h/.cpp 파일에 코드를 저장하면이 문제는 피할 수 있습니다. 그게 사실이야?
메모리 관리는 일반적으로 런타임에 동적 메모리를 처리하는 것을 말합니다. 명확성을 위해 : 헤더에 모든 코드를 작성하는 것은 그 코드와 아무 상관이 없습니다. 그러나 이렇게하면 컴파일러에서 실제로 사용하는 메모리 양이 늘어날 수 있습니다. 그렇다면 한 명인이 의미하는 바가 있다면 일 수 있습니다. 그렇지만 접근법에서 가장 큰 문제는 아닙니다.
나는 하나 개의 클래스
이 바보 인수입니다 너무 많은 중복을 얻을 수 있기 때문에. 사실, 정의에 헤더 파일 만 사용한다는 것은 클래스 정의가 정확히 한 번 포함되어있는 번역 단위가 정확히 하나 있다는 것을 의미합니다.
잠재적 인 문제는 단일 번역 단위에 모든 헤더 파일의 모든 정의가 포함되어 있다는 것입니다. 모든 것이 한 번에 처리되기 때문에 컴파일러에 필요한 최대 메모리는 잠재적으로 더 높습니다. 아마도 대부분의 프로젝트에서는 중요하지 않지만 libreoffice와 같은 것으로는 아마 문제가 될 수 있습니다.
헤더에 모든 기능을 정의하고있는 더 큰 문제 - 즉, 하나의 번역 단위를 사용하여 - 모든 헤더에 어떤 변화가, 그러나 작은, 하나의 대규모 번역 단위가 변경됩니다, 그리고 당신이 될 것이다 다시 컴파일해야합니다. 복수형 인 이 더 작 으면, 변환 단위는 변경 사항의 영향을받는 항목 만 재 컴파일해야합니다.
그래서 모든 재 컴파일은 처음부터 컴파일하는 것보다 느립니다. 물론 컴파일에 몇 분이 걸리는 경우 문제가되지 않지만 처음부터 컴파일하는 데 몇 시간이 걸리는 프로젝트의 경우 필수적입니다.
무엇주세요? 네가 묻는 것을 이해하지 못한다. –
메모리 문제는 없지만 컴파일러 방화벽을 사용할 수없는 이름 오염 문제가 있습니다. 그리고 차례로 순환 모듈 관계에 문제가 있음을 의미합니다. 컴파일러 방화벽을 사용하면 A의 구현은 B의 인터페이스에 의존 할 수 있으며 그 반대의 경우도 별도의 모듈로 사용할 수 있지만 순수 헤더 모듈을 사용하면 어떻게 든 퍼지해야합니다. –
글쎄, 몇 가지 문제를 일으킬 수있는 헤더의 코드를 두 번 포함하려고하면 포함 가드를 사용해야합니다. 하지만 그 외에 다른 문제는 없습니다. 예를 들어, 많은 부스트 라이브러리는 헤더 전용입니다. –