解析c++中的預設operator=操作的詳解

來源:互聯網
上載者:User

在c++中,如果沒有定義operator=操作,編譯器會提供一個預設的operator=操作。由於operator=操作和拷貝建構函式的功能類似,都執行拷貝操作。因此,編譯器也分提供無用的預設operator=操作和非無用的預設operator=操作。並且什麼時候提供非無用的預設operator=操作和無用的等操作的情形也和拷貝建構函式類似。(詳細分析過程請參考《基於c++中的預設拷貝函數的使用詳解》)

對於一個類,編譯器會提供非無用的operator=操作的情形:

1 該類是含有虛成員函數(繼承自虛基類,或者繼承的基類含有虛成員函數也屬於這種情況)

2 該類繼承的基類自訂了operator=操作(如果基類沒有自訂operator=操作,但是編譯器會為基類提供非無用的預設operator=操作,也屬於這種情況。這就是說,只要基類有一個非無用的operator=操作就行,不管這個非無用operator=操作是自訂的,還是編譯器提供的都行)

3 該類含有成員對象,該成員對象自訂了operator=操作(如果成員對象沒有自訂operator=操作,但是編譯器會為成員物件變數提供非無用的預設operator=操作,也屬於這種情況。這就是說,只要成員物件變數有一個非無用的operator=操作,不管這個非無用的operator=操作是自訂的,還是編譯器提供的,都行)

並且,如果類自訂了operator=操作,編譯器只是負責調用,不會額外提供任何拷貝過程;對於編譯器提供的預設operator=操作,不管是無用的還是非無用的,都只執行淺拷貝。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.