<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # unique_ptr unique_ptr(定義在中)提供了一種嚴格的語義上的所有權 * 擁有它所指向的對象 * 無法進行復制構造,也無法進行復制賦值操作(譯注:也就是對其無法進行復制,我們無法得到指向同一個對象的兩個unique_ptr),但是可以進行移動構造和移動賦值操作 * 保存指向某個對象的指針,當它本身被刪除釋放的時候(例如,離開某個作用域),會使用給定的刪除器(deleter)刪除釋放它指向的對象, unique_ptr的使用能夠包括: * 為動態申請的內存提供異常安全 * 將動態申請內存的所有權傳遞給某個函數 * 從某個函數返回動態申請內存的所有權 * 在容器中保存指針 “所有auto_ptr應該已經具有的(但是我們無法在C++98中實現的)功能” unique_ptr十分依賴于右值引用和移動語義。 下面是一段傳統的會產生不安全的異常的代碼: ``` X* f() { X* p = new X; // 做一些事情 – 可能會拋出某個異常 return p; } ``` 解決方法是,用一個unique_ptr 來管理這個對象的所有權,由其進行這個對象的刪除釋放工作: ``` X* f() { unique_ptr p(new X); // 或者使用{new X},但是不能 = new X // 做一些事情 – 可能會拋出異常 return p.release(); } ``` 現在,如果程序執行過程中拋出了異常,unique_ptr就會(毫無疑問地)刪除釋放它所指向的對象,這是最基本的RAII。但是,除非我們真的需要返回一個內建的指針,我們可以返回一個unique_ptr,讓事情變得更好。 ``` unique_ptr f() { unique_ptr p(new X); // 或者使用{new X},但是不能 = new X //做一些事情 – 可能會拋出異常 return p; // 對象的所有權被傳遞出f() } ``` 現在我們可以這樣使用函數f(): ``` void g() { unique_ptr q = f(); // 使用移動構造函數(move constructor) q->memfct(2); // 使用q X x = *q; // 復制指針q所指向的對象 // … } // 在函數退出的時候,q以及它所指向的對象都被刪除釋放 ``` unique_ptr擁有“移動意義(move semantics)”,所以我們可以使用函數f() 返回的右值對q進行初始化,這樣就簡單地將所有權傳遞給了q。 在那些要不是為了避免不安全的異常問題(以及為了保證指針所指向的對象都被正確地刪除釋放),我們不可以使用內建指針的情況下,我們可以在容器中保存unique_ptr以代替內建指針: ``` vector<unique_ptr<string>> vs { new string{“Doug”}, new string{“Adams”} }; ``` unique_ptr可以通過一個簡單的內建指針構造完成,并且與內建指針相比,兩者在使用上的差別很小。特殊情況下,unique_ptr并不提供任何形式的動態檢查(?)。 參考: + the C++ draft section 20.7.10 + Howard E. Hinnant: unique_ptr Emulation for C++03 Compilers + final proposal.
                  <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>

                              哎呀哎呀视频在线观看