成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

賦值運(yùn)算符重載函數(shù)不加&為什么會(huì)出錯(cuò)?

BLUE / 1681人閱讀

摘要:先說結(jié)論不加,形參是一個(gè)對(duì)象,這會(huì)形成一個(gè)臨時(shí)對(duì)象,會(huì)調(diào)用拷貝構(gòu)造函數(shù)發(fā)生淺拷貝問題??截悩?gòu)造函數(shù)調(diào)用啦看一下運(yùn)行結(jié)果沒有任何問題

賦值運(yùn)算符重載函數(shù)不加&為什么會(huì)出錯(cuò)?

void operator=(Add n){}

在賦值運(yùn)算符重載的時(shí)候,這個(gè)重載函數(shù)的參數(shù)到底需不需要加&呢?不加&會(huì)發(fā)生什么?

#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;}

讓我們來運(yùn)行一下上述代碼,看看發(fā)生了什么:

程序顯然已經(jīng)崩潰了,怎么出現(xiàn)了這個(gè)錯(cuò)誤呢?我們?cè)囈辉嚰恿?是什么樣子?

看一下結(jié)果:

可以看到程序正常運(yùn)行,也沒有發(fā)生崩潰現(xiàn)象。

先說結(jié)論:不加&,形參是一個(gè)對(duì)象,這會(huì)形成一個(gè)臨時(shí)對(duì)象,會(huì)調(diào)用拷貝構(gòu)造函數(shù)發(fā)生淺拷貝問題。這個(gè)臨時(shí)對(duì)象析構(gòu)完,原本對(duì)象的n_Num指針維護(hù)的區(qū)域已經(jīng)被釋放掉了,原本對(duì)象再進(jìn)行析構(gòu)的時(shí)候又會(huì)再釋放一次,那么這個(gè)程序就崩潰了。

那么不加&可以嗎?可以的,但是要自己寫一下拷貝構(gòu)造函數(shù),在形參拷貝臨時(shí)對(duì)象時(shí)變成深拷貝就?啦。

#include using namespace std;class Add{public:	Add(int n)	{		m_Num = new int(n);	}	Add(const Add& n)	{		cout << "拷貝構(gòu)造函數(shù)調(diào)用啦" << 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;}

看一下運(yùn)行結(jié)果:

沒有任何問題?。?!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/119007.html

相關(guān)文章

  • JS數(shù)據(jù)類型&amp; 判斷

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

    zhangxiangliang 評(píng)論0 收藏0
  • Python詞典查找數(shù)據(jù)的5個(gè)基本操作步驟

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

    89542767 評(píng)論0 收藏0
  • js中的|與 &amp;&amp; 運(yùn)算符詳解

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

    baoxl 評(píng)論0 收藏0
  • js中的|與 &amp;&amp; 運(yùn)算符詳解

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

    jsyzchen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<