賦值運算符和復制構造函數都是用已存在A的對象來創建另一個對象B。不同之處在于:賦值運算符處理兩個已有對象,即賦值前B應該是存在的;復制構造函數是生成一個全新的對象,即調用復制構造函數之前B不存在。
CTemp a(b); //復制構造函數,C++風格的初始化
CTemp a=b; //仍然是復制構造函數,不過這種風格只是為了與C兼容,與上面的效果一樣
在這之前a不存在,或者說還未構造好。
CTemp a;
a=b; //賦值運算符
在這之前a已經通過默認構造函數構造完成。
我覺得將賦值運算符稱為“
賦值構造函數”是錯誤的,構造函數發生在對象創建時期,而賦值是運算符,發生在“運算”時期,賦值運算前,對象已經構造完成,所以不能稱之為“構造函數”。
一家之言!!