<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] 參考: https://blog.csdn.net/breaksoftware/article/details/82780116 參考: https://liam.page/2020/04/21/managing-FILE-pointer-by-std-unique-ptr/ ## 用`std::unique_ptr`實現 熟悉`std::unique_ptr`的讀者不難發現,這其實就是一個經典的適合獨占類型的智能指針發揮作用的場景。不過,`std::unique_ptr`的默認刪除函數是銷毀其占有的指針指向的對象,亦即執行`delete p_`。但是,對于文件流來說,我們需要在智能指針完成使命之后關閉文件。 ``` template< class T, class Deleter = std::default_delete<T> > class unique_ptr; ``` 為此,我們需要使用自定義的刪除函數。也就是說,我們要給模板參數`Deleter`傳入一個合適的參數。這個參數應當是以下三者之一: * 接受`std::unique_ptr<T, Deleter>::pointer`作為參數的函數對象; * 接受`std::unique_ptr<T, Deleter>::pointer`作為參數的函數對象的左值引用; * 接受`std::unique_ptr<T, Deleter>::pointer`作為參數的函數。 換言之,我們得給`Deleter`傳這么個東西進去:`std::function<void(typename std::unique_ptr<T, Deleter>::pointer)>`。于是有代碼。 ``` #include <iostream> #include <fstream> #include <memory> #include <functional> void close_file(FILE* fp) { fclose(fp); } using FileHandler = std::unique_ptr<FILE, std::function<void(FILE*)>>; int main() { std::ofstream("demo.txt") << 'x'; // ensure the file does exist FileHandler fp(fopen("demo.txt", "r"), close_file); if (nullptr != fp) { std::cout << static_cast<char>(fgetc(fp.get())) << std::endl; } return 0; } ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看