<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、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                C++中有個很重要的事情,就是對于類重載賦值運算符,而達到我們想要的結果。 先看看這幾行代碼: ~~~ //Window 是一個類 Window w; w = w; // 再傻的人也不會這么干 w[i] = w[j]; // 這個情況偶爾會發生 ~~~ 作為一個優秀的工程師,就要考慮到任何可能的情況。 看一段更加完整的代碼: ~~~ class ScrollBar {}; class Window { ScrollBar *sb; public: Window(ScrollBar *s) : sb(s) {} Window() = default; Window& operator=(const Window&); }; Window& Window::operator=(const Window& rhs) { delete sb; sb = new ScrollBar(*rhs.sb); return *this; } int main() { Window w(new ScrollBar); Window w2(w); } ~~~ **這段代碼到底有什么坑兒呢?** 設想一下,如果 *this 和rhs 是同一個實例對象呢? 那么 ~~~ delete sb; sb = new ScrollBar(*rhs.sb); ~~~ 就會造成嚴重的問題。 再delete sb后, 我們試圖去訪問一個已經被刪除的rhs。這當然是致命的坑兒了。 跨越這個坑兒: ~~~ if (this == &rhs) return *this; delete sb; sb = new ScrollBar(*rhs.sb); return *this; ~~~ 上面這段代碼幾乎所有的教科書都會這么講,但是曾經一個arcserver的工程師跟我講,這樣同樣存在危險,不是完美的: 試想一下,如果我們delete sb后發生了異常怎么辦?這個時候,就會有存在一個沒有指向任何東西的指針。所以下面這樣寫會更好: ~~~ Window& Window::operator=(const Window& rhs) { if (this == &rhs) return *this; ScrollBar *sbOld = sb; sb = new ScrollBar(*rhs.sb); delete sbOld; return *this; } ~~~
                  <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>

                              哎呀哎呀视频在线观看