解析c++中的默認operator=操作的詳解
在c++中,如果沒有定義operator=操作,編譯器會提供一個默認的operator=操作。由于operator=操作和拷貝構造函數(shù)的功能類似,都執(zhí)行拷貝操作。因此,編譯器也分提供無用的默認operator=操作和非無用的默認operator=操作。并且什么時候提供非無用的默認operator=操作和無用的等操作的情形也和拷貝構造函數(shù)類似。(詳細分析過程請參考《基于c++中的默認拷貝函數(shù)的使用詳解》)
對于一個類,編譯器會提供非無用的operator=操作的情形:
1 該類是含有虛成員函數(shù)(繼承自虛基類,或者繼承的基類含有虛成員函數(shù)也屬于這種情況)
2 該類繼承的基類自定義了operator=操作(如果基類沒有自定義operator=操作,但是編譯器會為基類提供非無用的默認operator=操作,也屬于這種情況。這就是說,只要基類有一個非無用的operator=操作就行,不管這個非無用operator=操作是自定義的,還是編譯器提供的都行)
3 該類含有成員對象,該成員對象自定義了operator=操作(如果成員對象沒有自定義operator=操作,但是編譯器會為成員對象變量提供非無用的默認operator=操作,也屬于這種情況。這就是說,只要成員對象變量有一個非無用的operator=操作,不管這個非無用的operator=操作是自定義的,還是編譯器提供的,都行)
并且,如果類自定義了operator=操作,編譯器只是負責調用,不會額外提供任何拷貝過程;對于編譯器提供的默認operator=操作,不管是無用的還是非無用的,都只執(zhí)行淺拷貝。
相關文章
c++ lambda捕獲this 導致多線程下類釋放后還在使用的錯誤問題
Lambda表達式是現(xiàn)代C++的一個語法糖,挺好用的。但是如果使用不當,會導致內存泄露或潛在的崩潰問題,這里總結下c++ lambda捕獲this 導致多線程下類釋放后還在使用的錯誤問題,感興趣的朋友一起看看吧2023-02-02
大數(shù)據(jù)情況下桶排序算法的運用與C++代碼實現(xiàn)示例
在排序元素很多的情況下,其實桶排序的性能并不是太高,這里我們配合單鏈表的直接插入排序,來看下一大數(shù)據(jù)情況下桶排序算法的運用與C++代碼實現(xiàn)示例:2016-07-07
C/C++ Windows SAPI實現(xiàn)文字轉語音功能
本文通過封裝Windows SAPI(Speech Application Programming Interface),提供了一個現(xiàn)代化的C++接口實現(xiàn)文字轉語音功能,這篇文章重點給大家介紹C/C++ Windows SAPI自實現(xiàn)文字轉語音功能,感興趣的朋友一起看看吧2025-02-02

