第二周的課程是對第一周課程類設(shè)計的延伸几缭。在第一周的課程中,講了不帶指針的一般類的設(shè)計年栓,重點講了操作符的重載,及構(gòu)造函數(shù)的列表初始化等。而在第二周的課程中惰瓜,對含有指針的類(class with pointer)類重點部分做了詳細(xì)的說明汉矿,主要講述了以下幾個概念崎坊,而這些概念對今后類的設(shè)計(OOP)有很好的指導(dǎo)意義洲拇。
拷貝構(gòu)造
如果一個構(gòu)造函數(shù)的第一個參數(shù)是自身類類型的引用,且其他額外參數(shù)都有其默認(rèn)值男翰,則此構(gòu)造函數(shù)為拷貝構(gòu)造函數(shù)纽乱。
Foo(const Foo&)
拷貝構(gòu)造函數(shù)通常不應(yīng)該是explicit(這個內(nèi)容涉及到類型轉(zhuǎn)換)
當(dāng)類中的成員需要分配類外的資源時,通常的特征是在成員中含有指針變量蛾绎,這個時候往往采用系統(tǒng)自帶的合成拷貝構(gòu)造函數(shù)不能達(dá)到要求鸦列。需要重新設(shè)計拷貝構(gòu)造函數(shù)。顧名思義,拷貝構(gòu)造就是在構(gòu)造函數(shù)(ctor)中執(zhí)行深拷貝工作第股。
但正如<<C++ Primer>>中建議的那樣,使用vector對象或者std命名空間下的string對象夕吻,能夠避免分配和釋放內(nèi)存空間所帶來的復(fù)雜性。也就是說归园,使用string或者vector來替代字符指針(char*)和數(shù)組稚矿,能夠使用系統(tǒng)默認(rèn)的拷貝構(gòu)造函數(shù)而不需要重寫。
** 拷貝構(gòu)造函數(shù)被用來初始化非引用類類型參數(shù)**
拷貝賦值
這個概念實際上是對第一周學(xué)習(xí)的的操作符重載的延伸晤揣,即“=”號為賦值符,拷貝賦值實際上是對拷貝賦值運算符的重載昧识。賦值運算符返回一個指向其左側(cè)運算對象的引用.
** 如果一個運算符是一個成員函數(shù),其左側(cè)運算對象就綁定到隱式的this參數(shù).其右側(cè)運算對象作為顯式參數(shù)傳遞.**
析構(gòu)函數(shù)
析構(gòu)函數(shù)執(zhí)行與構(gòu)造函數(shù)相反的操作。析構(gòu)函數(shù)的主要作用是釋放對象所使用的動態(tài)分配的資源缀去,并銷毀對象的非static數(shù)據(jù)成員。
** 需要析構(gòu)函數(shù)的類也需要拷貝構(gòu)造和拷貝賦值**
也就是說缕碎,如果一個類需要析構(gòu)函數(shù),那么基本可以肯定的說阎曹,也需要拷貝構(gòu)造和拷貝賦值。