Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Mencapai Go-Style Defer dalam C Tanpa Mengorbankan Prestasi?
Tangguhkan Pelaksanaan dalam C
Konsep penangguhan gaya Go, yang membolehkan pembersihan sumber yang bersih dan ringkas, telah mendapat populariti dalam C . Walau bagaimanapun, mencari pelaksanaan pustaka standard atau disokong baik untuk ciri ini boleh menjadi mencabar.
Walaupun tiada sokongan terbina dalam untuk penangguhan dalam Pustaka Templat Standard (STL) atau Boost, terdapat pelaksanaan luaran yang tersedia . Satu pelaksanaan sedemikian ialah penyelesaian sifar overhed yang ringan:
<code class="cpp">#ifndef defer struct defer_dummy {}; template <class F> struct deferrer { F f; ~deferrer() { f(); } }; template <class F> deferrer<F> 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</code>
Pelaksanaan ini memerlukan persediaan yang minimum dan boleh disepadukan dengan mudah ke dalam pangkalan kod anda. Sintaksnya adalah mudah:
<code class="cpp">defer { statements; };</code>
Sebagai contoh, dalam coretan kod berikut, operasi fclose dilaksanakan secara automatik apabila skop fungsi read_entire_file dikeluarkan:
<code class="cpp">auto file = std::fopen(filename, "rb"); if (!file) return false; defer { std::fclose(file); }; // don't need to write an RAII file wrapper. // ...</code>
Sifar ini -pelaksanaan overhed menawarkan cara yang mudah dan cekap untuk mengurus pembersihan sumber dalam C , menyediakan ciri penangguhan Go-like tanpa memerlukan kelas RAII yang kompleks atau teknik pengurusan memori tersuai.
Atas ialah kandungan terperinci Bagaimana untuk Mencapai Go-Style Defer dalam C Tanpa Mengorbankan Prestasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!