C++重載“=”操作符引起的思考

參考https://bbs.csdn.net/topics/396949997

有一個類

class MyArry

在類的內部重載

MyArry& MyArry::operator=(const MyArry& arry);

但是

1 MyArry arry1(10);//調用構造方法實例化對象
2 MyArry arry2;//聲明一個變量
3 arry2 = arry1;//調用了重載的“=”
4 MyArry arry3 = arry2;//調用了拷貝構造方法

在第4行中調用的並不是重載後的=

      原因是  MyArry arry3 = arry2;執行過程中 arry3 還不能代表一個對象,而MyArry& MyArry::operator=(const MyArry& arry);的調用需要的兩個參數都是MyArry 的對象。

如下圖,聲明過程中是沒有辦法調用

那麼爲什麼聲明過程中不能調用,但是聲明完以後能調用呢?

那是因爲,聲明過程實際上是調用呢無參構造函數,無參構造函數或生成一個對象;而在調用完成之前是沒有返回對象

看下下面的運行過程:

執行中,沒有產生對象;

執行完產生了對象

執行中沒有對象,所以也就不能調用operator=

 

 

總結:

1、A a1 = b;調用的是拷貝構造,不是operator=;原因是執行=號時左側還沒產生A 對象;

2、操作符重載一定要分析操作符的參數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章