因為做了小的實驗,
string s("abc");
string t1 = s;
string t2(s);
發現t1和t2都是呼叫拷貝建構函式,
原以為t1應該呼叫賦值函式的。
感覺很不可思議。
從擺渡上搜了一下,終於找到了答案。在此記錄一下。
賦值運算子與拷貝建構函式都是用已有物件建立另乙個物件。
拷貝建構函式是生成乙個全新物件。
a a (b);//這才是c++風格的初始化
a a = b;//注意,這種風格只是為了與c相容
在這之前a物件是不存在的,或者說還沒有構造好。
賦值operator =()是兩個物件都已經構造好的情況下使用的。即
a = b;
的時候,a和b都已經初始化過了(這裡的「初始化過」包括預設的建構函式初始化)。
拷貝建構函式與賦值運算子
物件的 生命週期 管理意味著完全地控制物件的誕生 繁殖和消亡的過程。使用拷貝建構函式和賦值運算子,可以更快的進行物件的繁殖操作。拷貝建構函式是一種建構函式,其原型類似於 classname const classname x 賦值建構函式的作用就是建立乙個物件,該物件是同乙個類中已有物件的精確副本。...
拷貝建構函式與賦值運算子過載
拷貝建構函式 只有單個形參,該形參是對本類型別物件的引用 一般常用const修飾 在用已存在的類型別物件建立新物件時由編譯器自動呼叫。1.拷貝建構函式是建構函式的乙個過載形式 class date date const date d private int year int month int da...
拷貝建構函式與過載賦值運算子
注意 該作者部落格已遷移至 如果乙個建構函式的第乙個引數是自身類型別的引用,且任何額外的引數都有預設值,則此建構函式是拷貝建構函式。c premier裡的定義 拷貝建構函式應用的場景 預設拷貝建構函式 class ctest ctest void test ctest obj intmain 這個程...