임시 함수 인수는 언제 죽나요?
C에서 임시 객체가 함수에 대한 인수로 생성되면 컴파일러는 자동으로 수명을 관리합니다. 이는 다음과 같은 질문을 제기합니다. 임시 개체의 소멸자는 어느 시점에서 호출되도록 보장됩니까?
C 표준에 따르면 임시 개체는 자신이 속한 전체 표현식이 끝나면 삭제됩니다. 여기서 전체 표현식은 다른 표현식의 하위 표현식이 아닌 표현식입니다. 일반적으로 제어 흐름 문(예: if, while, switch)의 세미콜론(;) 또는 닫는 괄호()로 끝납니다.
제공된 예에서:
class MyClass { MyClass(int a); }; myFunction(MyClass(42));
함수 인수로 생성된 임시 MyClass 객체는 함수 호출 문이 끝난 후, 즉 세미콜론을 만난 후 삭제됩니다. 따라서 후속 명령문이 실행되기 전에 소멸자가 호출될 것이라고 가정할 수 있습니다.
const 참조를 사용하여 임시 수명을 연장할 수 있다는 점은 주목할 가치가 있습니다. 임시 항목을 const 참조에 바인딩하면 참조 수명과 일치하도록 수명이 연장됩니다.
MyClass getMyClass(); { const MyClass& r = getMyClass(); // full expression ends here ... } // object returned by getMyClass() is destroyed here
이 기술은 특히 반환 값 최적화 시 함수에서 반환된 값을 유지하면서 불필요한 복사 구성을 줄일 수 있습니다. 해당되지 않습니다. 그러나 C 11에 이동 의미론이 등장하면서 그 유용성이 다소 감소했습니다.
위 내용은 C 임시 함수 인수는 정확히 언제 소멸되나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!