中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

万年县| 蕲春县| 南川市| 阳东县| 秦皇岛市| 读书| 环江| 霍邱县| 白城市| 富锦市| 丹阳市| 武陟县| 秦安县| 桂东县| 华亭县| 闵行区| 织金县| 明水县| 达孜县| 高清| 特克斯县| 井陉县| 宜春市| 金乡县| 兴业县| 古蔺县| 吉首市| 福清市| 象山县| 富锦市| 万全县| 台中县| 剑川县| 宜丰县| 青浦区| 松桃| 铜山县| 新巴尔虎右旗| 唐山市| 泰顺县| 英山县|