【GeekBand】C++面向?qū)ο蟾呒?jí)編程-第二周筆記

一、只要類中帶有指針,則類中必須有Big Three。

Big Three 分別是:

1.拷貝構(gòu)造函數(shù): string(const string& other); 簡(jiǎn)稱 copy ctor
2.拷貝賦值:string& operator = (const string& other); 簡(jiǎn)稱 copy op=
3.析構(gòu)函數(shù): ~string();

拷貝賦值不等于拷貝構(gòu)造

string s3(s1);s3 = s1;不一樣,前者是拷貝構(gòu)造的方式進(jìn)行初始化,而后者是賦值,需要重載=,是拷貝賦值。

在構(gòu)造函數(shù)中,需要對(duì)指針進(jìn)行動(dòng)態(tài)內(nèi)存分配,而在析構(gòu)函數(shù)中,需要消除該內(nèi)存空間。
new 與 delete對(duì)應(yīng);
new TypeName[] 與 delete[] pointer name 對(duì)應(yīng)

拷貝賦值經(jīng)典寫法:

-檢查賦值對(duì)象與被賦值對(duì)象是否是同一地址(檢測(cè)自我賦值),是的話直接地址返回被賦值對(duì)象。一方面可以提高效率,另一方面是比較出現(xiàn)賦值對(duì)象的內(nèi)存空間被同一地址的被賦值對(duì)象消除,以至于在接下來的步驟中出錯(cuò);
-先清空被賦值對(duì)象的內(nèi)存空間;
-再動(dòng)態(tài)創(chuàng)建一個(gè)被賦值對(duì)象的新內(nèi)存空間;
-再賦值。

二、stack(棧)與heap(堆)

捕獲.JPG

圖中表示的是動(dòng)態(tài)分配所得到的內(nèi)存塊
紅色的稱為cookies,用來表示內(nèi)存塊的起始位置與終點(diǎn)位置;
灰色的是調(diào)試模式下才有的
綠色的則是類在棧中的內(nèi)存模型
淺綠色的是為了內(nèi)存對(duì)齊,需要能夠被16整除,所以原本是占了52個(gè)單元,但實(shí)際上是占用了64個(gè)單位的內(nèi)存空間。

三、Singleton

有時(shí)候一個(gè)類不希望被其他人創(chuàng)建對(duì)象,則可以將構(gòu)造函數(shù)設(shè)為私有,此時(shí)該類的使用方式會(huì)比較特別:

class A{
public:
static A& getInstance(return a;);
setup() {...}
private:
A();
A(const A& rhs);
static A a;
... 
};

使用方法:
A::getInstance().setup();

或者是另一種寫法

class A{
public:
static A& getInstance(return a;);
setup() {...}
private:
A();
A(const A& rhs);
... 
};

A& A::getInstance()
{
static A a;
return a;
};

使用方法:
A::getInstance().setup();

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容