摘要:先說結(jié)論不加,形參是一個(gè)對(duì)象,這會(huì)形成一個(gè)臨時(shí)對(duì)象,會(huì)調(diào)用拷貝構(gòu)造函數(shù)發(fā)生淺拷貝問題??截悩?gòu)造函數(shù)調(diào)用啦看一下運(yùn)行結(jié)果沒有任何問題
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
摘要:的數(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...
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...
摘要:這個(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ī)則如下: 兩邊條...
摘要:這個(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ī)則如下: 兩邊條...
閱讀 2435·2023-04-26 00:46
閱讀 598·2023-04-25 21:36
閱讀 741·2021-11-24 10:19
閱讀 2286·2021-11-23 09:51
閱讀 1031·2021-10-21 09:39
閱讀 846·2021-09-22 10:02
閱讀 1682·2021-09-03 10:29
閱讀 2717·2019-08-30 15:53