国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

賦值運算符重載函數不加&為什么會出錯?

BLUE / 1671人閱讀

摘要:先說結論不加,形參是一個對象,這會形成一個臨時對象,會調用拷貝構造函數發生淺拷貝問題。拷貝構造函數調用啦看一下運行結果沒有任何問題

賦值運算符重載函數不加&為什么會出錯?

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

相關文章

  • JS數據類型&amp; 判斷

    摘要:的數據類型,共有六種。通常,數值字符串布爾值這三種類型,合稱為原始類型的值,即它們是最基本的數據類型,不能再細分了。運算符返回一個布爾值,表示某個對象是否為指定的構造函數的實例。 以下內容摘自阮一峰-JavaScript-標準參考教程 數據類型 JavaScript 語言的每一個值,都屬于某一種數據類型。JavaScript 的數據類型,共有六種。(ES6 又新增了第七種 Symbo...

    zhangxiangliang 評論0 收藏0
  • Python詞典查找數據的5個基本操作步驟

      Python詞典是另一個可變性器皿實體模型,并可存放隨意種類目標,如字符串數組、數據信息、數組等其它器皿實體模型,接下來本文關鍵為大家介紹了對于Python詞典查找數據的5個基本操作步驟,必須的小伙伴可以借鑒一下  序言  上篇文章寫對于詞典操作步驟的增刪改,這篇文章關鍵解讀如何查找詞典數據信息。查找數據書寫總共有二種,一類能夠是key值搜索,另一種是根據函數的書寫開展關聯查詢。  一、key...

    89542767 評論0 收藏0
  • js中的|與 &amp;&amp; 算符詳解

    摘要:這個時候我就有點犯迷糊了,為什么邏輯運算符能這么用呢由于是出身,所以對這樣用感覺很奇怪。 這篇文章主要介紹了js中的 || 與 && 運算符詳解,需要的朋友可以參考下 一 js中邏輯運算符在開發中可以算是比較常見的運算符了,主要有三種:邏輯與&&、邏輯或||和邏輯非!。 當&&和|| 連接語句時,兩邊的語句會轉化為布爾類型(Boolean),然后再進行運算,具體的運算規則如下: 兩邊條...

    baoxl 評論0 收藏0
  • js中的|與 &amp;&amp; 算符詳解

    摘要:這個時候我就有點犯迷糊了,為什么邏輯運算符能這么用呢由于是出身,所以對這樣用感覺很奇怪。 這篇文章主要介紹了js中的 || 與 && 運算符詳解,需要的朋友可以參考下 一 js中邏輯運算符在開發中可以算是比較常見的運算符了,主要有三種:邏輯與&&、邏輯或||和邏輯非!。 當&&和|| 連接語句時,兩邊的語句會轉化為布爾類型(Boolean),然后再進行運算,具體的運算規則如下: 兩邊條...

    jsyzchen 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<