您好,登錄后才能下訂單哦!
本篇內容主要講解“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;
當我們運行的時候就會遇到這樣的報錯:
報錯的原因日志里寫得很清楚,我們嘗試釋放一個沒有被分配的內存。
會報錯的原因很簡單,因為我們執行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++賦值運算符怎么用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。