91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++賦值運算符怎么用

發布時間:2022-01-04 10:28:53 來源:億速云 閱讀:120 作者:iii 欄目:開發技術

本篇內容主要講解“C++賦值運算符怎么用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C++賦值運算符怎么用”吧!

C++當中允許類對象賦值,這是通過默認的重載賦值運算符實現的,它的原型如下:

Class_name & Class_name::operator=(const Class_name &);

它接受并返回一個指向類對象的引用。

將已有的對象賦給另一個對象時,將會使用重載的賦值運算符:

StringBad headline1("Celery");
StringBad knot;

knot = headline1; // 調用賦值運算符

如果是對象初始化的過程,則不一定會使用賦值運算符,比如:

StringBad metoo = knot;

像是這種情況很難說,因為metoo是一個新建的對象,它可以使用拷貝構造函數。然而,也可以分成兩步來處理,先使用拷貝構造函數創建一個臨時對象,然后在賦值的時候使用賦值運算符復制到新對象中去也是可以的。

和拷貝構造函數類似,默認賦值運算符的實現也是對成員進行逐個復制。如果成員本身就是累對象,那么會使用這個類的賦值運算符來復制。

賦值運算符的問題在哪里呢?我們還是看下之前StringBad那個例子,

我們看下下面這段代碼:

StringBad sb("test");
StringBad sports("Spinach Leaves Bowl for Dollars");
StringBad knot;
knot = sports;

當我們運行的時候就會遇到這樣的報錯:

C++賦值運算符怎么用

報錯的原因日志里寫得很清楚,我們嘗試釋放一個沒有被分配的內存。

會報錯的原因很簡單,因為我們執行knot = sports的時候,兩個對象內部的字符串指向的是同一個地址。這就導致了析構knot的時候sports對象對應的內容已經不存在了。

解決方案也很簡單,就是我們自己重載賦值運算符,保證不會出現簡單拷貝的問題。

StringBad & StringBad::operator= (const StringBad & st) {
    if (this == &st) return *this;
    delete []str;
    len = st.len;
    str = new char[len+1];
    std::strcpy(str, st.str);
    return *this;
}

到此,相信大家對“C++賦值運算符怎么用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

广宁县| 石渠县| 武汉市| 孝昌县| 黄大仙区| 黔南| 洛隆县| 贺州市| 天等县| 新龙县| 东阿县| 满城县| 房产| 凤冈县| 玉环县| 磐石市| 五指山市| 广水市| 鞍山市| 新安县| 册亨县| 清原| 广德县| 阳西县| 绿春县| 延安市| 锡林郭勒盟| 灵丘县| 河西区| 玛沁县| 永寿县| 博白县| 临邑县| 伊金霍洛旗| 建瓯市| 东乌珠穆沁旗| 新龙县| 宝应县| 辉南县| 博乐市| 乐昌市|