C에서 구현 연기
깨끗하고 간결한 리소스 정리를 허용하는 Go 스타일 연기 개념이 C에서 인기를 얻었습니다. . 그러나 이 기능에 대해 표준 또는 잘 지원되는 라이브러리 구현을 찾는 것은 어려울 수 있습니다.
표준 템플릿 라이브러리(STL) 또는 Boost에 지연에 대한 기본 지원이 없음에도 불구하고 사용 가능한 외부 구현이 있습니다. . 이러한 구현 중 하나는 가볍고 오버헤드가 없는 솔루션입니다.
#ifndef defer
struct defer_dummy {};
template struct deferrer { F f; ~deferrer() { f(); } };
template deferrer operator*(defer_dummy, F f) { return {f}; }
#define DEFER_(LINE) zz_defer##LINE
#define DEFER(LINE) DEFER_(LINE)
#define defer auto DEFER(__LINE__) = defer_dummy{} *[&]()
#endif // defer
이 구현에는 최소한의 설정이 필요하며 코드베이스에 쉽게 통합될 수 있습니다. 구문은 간단합니다.
defer { statements; };
예를 들어 다음 코드 조각에서는 read_entire_file 함수의 범위가 종료되면 fclose 작업이 자동으로 실행됩니다.
auto file = std::fopen(filename, "rb");
if (!file)
return false;
defer { std::fclose(file); }; // don't need to write an RAII file wrapper.
// ...
이 제로 오버헤드 구현은 C에서 리소스 정리를 관리하는 편리하고 효율적인 방법을 제공하여 복잡한 RAII 클래스나 사용자 정의 메모리 관리 기술이 필요 없이 Go와 유사한 연기 기능을 제공합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3