摘要:先說結論不加,形參是一個對象,這會形成一個臨時對象,會調用拷貝構造函數發生淺拷貝問題。拷貝構造函數調用啦看一下運行結果沒有任何問題
void operator=(Add n){}
在賦值運算符重載的時候,這個重載函數的參數到底需不需要加&呢?不加&會發生什么?
#include using namespace std;class Add{public: Add(int n) { m_Num = new int(n); } void operator=(Add n) { if (this->m_Num != NULL) { delete this->m_Num; this->m_Num = NULL; } this->m_Num = new int(*n.m_Num); } ~Add() { if (m_Num != NULL) { delete m_Num; m_Num = NULL; } } int* m_Num;};void test01(){ Add n1(10); Add n2(20); n1 = n2; cout << *n1.m_Num << endl; }int main(){ test01(); return 0;}
讓我們來運行一下上述代碼,看看發生了什么:
程序顯然已經崩潰了,怎么出現了這個錯誤呢?我們試一試加了&是什么樣子?
看一下結果:
可以看到程序正常運行,也沒有發生崩潰現象。
先說結論:不加&,形參是一個對象,這會形成一個臨時對象,會調用拷貝構造函數發生淺拷貝問題。這個臨時對象析構完,原本對象的n_Num指針維護的區域已經被釋放掉了,原本對象再進行析構的時候又會再釋放一次,那么這個程序就崩潰了。
那么不加&可以嗎?可以的,但是要自己寫一下拷貝構造函數,在形參拷貝臨時對象時變成深拷貝就?啦。
#include using namespace std;class Add{public: Add(int n) { m_Num = new int(n); } Add(const Add& n) { cout << "拷貝構造函數調用啦" << endl; m_Num = new int(*n.m_Num); } void operator=(Add n) { if (this->m_Num != NULL) { delete this->m_Num; this->m_Num = NULL; } this->m_Num = new int(*n.m_Num); } ~Add() { if (m_Num != NULL) { delete m_Num; m_Num = NULL; } } int* m_Num;};void test01(){ Add n1(10); Add n2(20); n1 = n2; cout << *n1.m_Num << endl; }int main(){ test01(); return 0;}
看一下運行結果:
沒有任何問題!!!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/119007.html
摘要:的數據類型,共有六種。通常,數值字符串布爾值這三種類型,合稱為原始類型的值,即它們是最基本的數據類型,不能再細分了。運算符返回一個布爾值,表示某個對象是否為指定的構造函數的實例。 以下內容摘自阮一峰-JavaScript-標準參考教程 數據類型 JavaScript 語言的每一個值,都屬于某一種數據類型。JavaScript 的數據類型,共有六種。(ES6 又新增了第七種 Symbo...
Python詞典是另一個可變性器皿實體模型,并可存放隨意種類目標,如字符串數組、數據信息、數組等其它器皿實體模型,接下來本文關鍵為大家介紹了對于Python詞典查找數據的5個基本操作步驟,必須的小伙伴可以借鑒一下 序言 上篇文章寫對于詞典操作步驟的增刪改,這篇文章關鍵解讀如何查找詞典數據信息。查找數據書寫總共有二種,一類能夠是key值搜索,另一種是根據函數的書寫開展關聯查詢。 一、key...
摘要:這個時候我就有點犯迷糊了,為什么邏輯運算符能這么用呢由于是出身,所以對這樣用感覺很奇怪。 這篇文章主要介紹了js中的 || 與 && 運算符詳解,需要的朋友可以參考下 一 js中邏輯運算符在開發中可以算是比較常見的運算符了,主要有三種:邏輯與&&、邏輯或||和邏輯非!。 當&&和|| 連接語句時,兩邊的語句會轉化為布爾類型(Boolean),然后再進行運算,具體的運算規則如下: 兩邊條...
摘要:這個時候我就有點犯迷糊了,為什么邏輯運算符能這么用呢由于是出身,所以對這樣用感覺很奇怪。 這篇文章主要介紹了js中的 || 與 && 運算符詳解,需要的朋友可以參考下 一 js中邏輯運算符在開發中可以算是比較常見的運算符了,主要有三種:邏輯與&&、邏輯或||和邏輯非!。 當&&和|| 連接語句時,兩邊的語句會轉化為布爾類型(Boolean),然后再進行運算,具體的運算規則如下: 兩邊條...
閱讀 2426·2023-04-26 00:46
閱讀 585·2023-04-25 21:36
閱讀 732·2021-11-24 10:19
閱讀 2275·2021-11-23 09:51
閱讀 1021·2021-10-21 09:39
閱讀 834·2021-09-22 10:02
閱讀 1672·2021-09-03 10:29
閱讀 2691·2019-08-30 15:53