'goto' 문이 소멸자를 호출하지 않고 함수 경계를 뛰어넘을 수 있나요?
goto 점프가 코드의 질서 있는 실행을 우회한다고 일반적으로 알려져 있습니다. , 객체 파괴를 포함합니다. 그러나 이는 C의 범위 지정 규칙에 대한 오해에서 비롯된 오해입니다.
라벨 범위
첫째, goto 점프는 해당 범위 내에 국한됩니다. 각각의 기능. 제공한 예에서처럼 기능 경계를 뛰어넘는 것은 불가능합니다. 컴파일러는 점프가 시작된 함수에 레이블이 정의되지 않았음을 나타내는 오류를 발행합니다.
객체 초기화 및 범위
둘째, goto 점프는 객체 초기화. 객체가 선언되고 초기화되는 지점을 지나서 점프가 이루어지면 객체의 범위로 들어가고 해당 생성자가 호출됩니다. 그러나 점프가 이미 초기화된 객체의 범위로 다시 만들어지면 점프가 실행되기 전에 해당 소멸자가 호출됩니다.
객체 범위 보존
마지막으로, 자동 저장 기간이 있는 객체(즉, 블록 내에 선언된 변수)는 goto 점프로 인해 누출되지 않습니다. goto를 통해 개체의 범위를 벗어나면 해당 개체가 파괴되어 리소스 관리가 올바르게 처리됩니다.
결론
일반적인 믿음과는 달리 C의 goto 문은 허용되지 않습니다. 범위 지정 규칙을 위반하거나 메모리 누수를 초래하는 제어되지 않은 점프의 경우. goto의 사용은 디자인상의 이유로 여전히 논쟁의 여지가 있지만 종종 이로 인해 발생하는 고유한 위험을 초래하지는 않습니다.
위 내용은 C에서 `goto` 문은 객체 소멸자를 우회합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!