c++ 이중연결리스트 예제

전역(네임스페이스 범위) 변수(호출 모드)를 통해 함수의 동작을 제어하는 것은 암시적이며 잠재적으로 혼동될 수 있습니다. 예를 들어 이 예제에서는 오버플로가 정의되지 않아 달성하려는 작업을 달성하지 못하며 간단한 static_assert: ={}는 복사 초기화를 제공하지만 {}는 직접 초기화를 제공합니다. 복사 초기화와 직접 초기화 자체의 차이와 마찬가지로 이로 인해 놀라움이 발생할 수 있습니다. {} 명시적 생성자 허용; ={} 하지 않습니다.` 예를 들어 문자열에 대해 «> 및 !=가 제공되는 방법(유용한 작업의 예)과 명시적 할당, 거래 로케이션 또는 범위 검사(문자열이 해당 작업을 처리함)가 없는 방법을 확인합니다. 머리와 꼬리의 두 개의 노드를 만들었습니다. 첫 번째 노드를 `head`에 저장하고 마지막 노드를 `꼬리`에 저장합니다. 링크 된 목록의 생성자는 아직 연결된 목록에 요소를 추가하지 않았기 때문에 `head`와 `tail` NULL을 모두 만들고 있으므로 둘 다 NULL입니다. 클래스는 소유하지 않은 개체에 대한 포인터와 참조를 보유할 수 있습니다. 분명히 이러한 개체는 클래스의 소멸자가 삭제해서는 안됩니다. 예를 들어 매크로를 사용하여 하위 수준 문자열 조작에 대한 해결 방법이 있습니다. 예: 까다롭습니다.

void* 함수 인수를 찾으려면 나중에 최적화를 방해하는 인터페이스의 예제를 찾을 수 있습니다. 다음 예제는 비효율적이다 (그것은 불필요한 할당 및 할당 을 가지고 있기 때문에), 예외 throw 및 반환에 취약 … 파트(누수로 이어지는) 및 자세한 내용: 대부분의 경우 사용자 정의 특정 형식을 반환하는 것이 유용할 수 있습니다. 예를 들어 예외를 catch하려고 할 때도 비슷한 문제가 발생합니다. 예를 들어 read_and_print에 거의 모든 것이 잘못되었습니다. 그것은 읽기, 그것은 (고정 된 ostream에) 쓰기, 그것은 오류 메시지를 기록 (고정 된 ostream에), 그것은 단지 ints를 처리합니다. 다시 사용할 것이 없으며 논리적으로 분리된 작업이 혼합되고 로컬 변수가 논리적 사용이 끝난 후 범위에 있습니다. 작은 예로, 이것은 확인 보이지만 입력 작업, 출력 작업 및 오류 처리가 더 복잡했다면 얽힌 혼란을 이해하기 어려울 수 있습니다. 규칙은 최소 또는 직교를 위한 것이 아닙니다. 특히 일반 규칙은 간단할 수 있지만 적용할 수 없습니다. 또한 일반적인 규칙의 의미를 이해하기가 어려운 경우가 많습니다. 보다 전문화된 규칙은 종종 이해하기 쉽고 적용하기 쉽지만 일반적인 규칙이 없으면 특별한 경우의 긴 목록이 될 것입니다.

우리는 초보자를 돕기위한 규칙뿐만 아니라 전문가 사용을 지원하는 규칙을 제공합니다. 일부 규칙은 완전히 적용할 수 있지만 다른 규칙은 추론을 기반으로 합니다. 리소스를 해제할 수 없고 프로그램이 실패하지 않을 수 있는 경우, 시스템의 나머지 부분에 오류를 알리는 방법을 사용하십시오(일부 전역 상태를 수정하여 무언가를 알아차리고 문제를 해결할 수 있기를 바랍니다). 이 기술은 특수목적이며 오류가 발생하기 쉽다는 점에 유의하십시오. «내 연결이 닫히지 않습니다»예제를 고려하십시오. 연결의 다른 쪽 끝에 문제가 있고 연결의 양쪽 끝을 담당하는 코드 한 부분만 문제를 제대로 처리할 수 있습니다. 소멸자는 시스템의 책임 있는 부분에 메시지를 보내고 연결을 닫았다고 생각하고 정상적으로 반환할 수 있습니다. 개별적으로 연결된 목록의 기본 프레임워크가 준비되었습니다. 이제 목록에서 다른 작업을 수행할 차례입니다. 기본적으로 연결된 목록에서 두 가지 작업이 수행됩니다.

포인터와 복잡한 제어 구조가 산재해 있지 않은 코드에서 예외적인 상황에 사용할 경우 예외 처리는 거의 항상 시간과 공간에서 저렴하며 거의 항상 더 나은 코드로 이어집니다.