C 中賦值運算子與拷貝建構函式的區別

2021-04-20 05:49:02 字數 471 閱讀 9502

因為做了小的實驗,

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 這個程...