成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

BLUE / 1775人閱讀

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

賦值運(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;}

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

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

看一下結(jié)果:

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

先說(shuō)結(jié)論:不加&,形參是一個(gè)對(duì)象,這會(huì)形成一個(gè)臨時(shí)對(duì)象,會(huì)調(diào)用拷貝構(gòu)造函數(shù)發(fā)生淺拷貝問(wèn)題。這個(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é)果:

沒(méi)有任何問(wèn)題?。。?/p>

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/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 語(yǔ)言的每一個(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í)體模型,接下來(lái)本文關(guān)鍵為大家介紹了對(duì)于Python詞典查找數(shù)據(jù)的5個(gè)基本操作步驟,必須的小伙伴可以借鑒一下  序言  上篇文章寫對(duì)于詞典操作步驟的增刪改,這篇文章關(guān)鍵解讀如何查找詞典數(shù)據(jù)信息。查找數(shù)據(jù)書寫總共有二種,一類能夠是key值搜索,另一種是根據(jù)函數(shù)的書寫開(kāi)展關(guān)聯(lián)查詢?! ∫?、key...

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

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

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

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

0條評(píng)論

閱讀需要支付1元查看
<