解析c++中的默認(rèn)operator=操作的詳解
在c++中,如果沒有定義operator=操作,編譯器會(huì)提供一個(gè)默認(rèn)的operator=操作。由于operator=操作和拷貝構(gòu)造函數(shù)的功能類似,都執(zhí)行拷貝操作。因此,編譯器也分提供無(wú)用的默認(rèn)operator=操作和非無(wú)用的默認(rèn)operator=操作。并且什么時(shí)候提供非無(wú)用的默認(rèn)operator=操作和無(wú)用的等操作的情形也和拷貝構(gòu)造函數(shù)類似。(詳細(xì)分析過(guò)程請(qǐng)參考《基于c++中的默認(rèn)拷貝函數(shù)的使用詳解》)
對(duì)于一個(gè)類,編譯器會(huì)提供非無(wú)用的operator=操作的情形:
1 該類是含有虛成員函數(shù)(繼承自虛基類,或者繼承的基類含有虛成員函數(shù)也屬于這種情況)
2 該類繼承的基類自定義了operator=操作(如果基類沒有自定義operator=操作,但是編譯器會(huì)為基類提供非無(wú)用的默認(rèn)operator=操作,也屬于這種情況。這就是說(shuō),只要基類有一個(gè)非無(wú)用的operator=操作就行,不管這個(gè)非無(wú)用operator=操作是自定義的,還是編譯器提供的都行)
3 該類含有成員對(duì)象,該成員對(duì)象自定義了operator=操作(如果成員對(duì)象沒有自定義operator=操作,但是編譯器會(huì)為成員對(duì)象變量提供非無(wú)用的默認(rèn)operator=操作,也屬于這種情況。這就是說(shuō),只要成員對(duì)象變量有一個(gè)非無(wú)用的operator=操作,不管這個(gè)非無(wú)用的operator=操作是自定義的,還是編譯器提供的,都行)
并且,如果類自定義了operator=操作,編譯器只是負(fù)責(zé)調(diào)用,不會(huì)額外提供任何拷貝過(guò)程;對(duì)于編譯器提供的默認(rèn)operator=操作,不管是無(wú)用的還是非無(wú)用的,都只執(zhí)行淺拷貝。
相關(guān)文章
Vscode搭建遠(yuǎn)程c開發(fā)環(huán)境的圖文教程
很久沒有寫C語(yǔ)言了,今天抽空學(xué)習(xí)下C語(yǔ)言知識(shí),接下來(lái)通過(guò)本文給大家介紹Vscode搭建遠(yuǎn)程c開發(fā)環(huán)境的詳細(xì)步驟,本文通過(guò)圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-11-11從頭學(xué)習(xí)C語(yǔ)言之switch語(yǔ)句和分支嵌套
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言之switch語(yǔ)句和分支嵌套,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-01-01C語(yǔ)言數(shù)據(jù)的存儲(chǔ)超詳細(xì)講解中篇練習(xí)
使用編程語(yǔ)言進(jìn)行編程時(shí),需要用到各種變量來(lái)存儲(chǔ)各種信息。變量保留的是它所存儲(chǔ)的值的內(nèi)存位置。這意味著,當(dāng)您創(chuàng)建一個(gè)變量時(shí),就會(huì)在內(nèi)存中保留一些空間。您可能需要存儲(chǔ)各種數(shù)據(jù)類型的信息,操作系統(tǒng)會(huì)根據(jù)變量的數(shù)據(jù)類型,來(lái)分配內(nèi)存和決定在保留內(nèi)存中存儲(chǔ)什么2022-04-04詳解C/C++ QT QChart 繪制組件應(yīng)用
Qtcharts 組件基于GraphicsView模式實(shí)現(xiàn),其核心是QChartView和QChart的二次封裝版。本文重點(diǎn)給大家介紹C/C++ QT QChart 繪制組件應(yīng)用的相關(guān)知識(shí),感興趣的朋友一起看看吧2021-11-11C++ OpenCV實(shí)戰(zhàn)之制作九宮格圖像
本文將為大家介紹如何使用OpenCV C++ 制作九宮格圖像,即將一張圖像均等分成九份,然后將這九個(gè)小塊按一定間隔拷貝到新畫布上就可以啦。感興趣的可以動(dòng)手試一試2022-01-01