GeekBand C++面向?qū)ο蟾呒?jí)編程(上)筆記2

在一個(gè)類中必定含有構(gòu)造函數(shù),析構(gòu)函數(shù),拷貝構(gòu)造函數(shù),以及拷貝賦值函數(shù)。

接下來(lái)先談下編寫這四個(gè)函數(shù)需要注意的地方

ctor(構(gòu)造函數(shù))和dtor(析構(gòu)函數(shù))

1)構(gòu)造函數(shù)傳入指針時(shí),如果有初值,new char[strlen(cstr) + 1];strcpy(m_data, cstr);

如果沒(méi)有初值,new char[1]; *m_data = '\0';//存放結(jié)束符

2)析構(gòu)函數(shù),new什么,就delete什么。

copy ctor(拷貝構(gòu)造函數(shù))

1)new char[strlen(cstr) + 1];strcpy(m_data, cstr);來(lái)源端和目的端都是本類

copy assignment operator(拷貝賦值函數(shù))

1)先清理目的端,才能賦值

2)需要判斷是不是自我賦值

if(this == &str) return *this;

Typename&--表示引用

&object--表示取地址


接下來(lái)談一談C++的內(nèi)存管理

內(nèi)存泄漏幾乎在每個(gè)C++程序中都會(huì)發(fā)生,所以內(nèi)存管理是學(xué)習(xí)C++ 的必經(jīng)之路。

在C++中,內(nèi)存分成5個(gè)區(qū),他們分別是堆、棧、自由存儲(chǔ)區(qū)、全局/靜態(tài)存儲(chǔ)區(qū)和常量存儲(chǔ)區(qū)。

:在執(zhí)行函數(shù)時(shí),函數(shù)內(nèi)局部變量的存儲(chǔ)單元都可以在棧上創(chuàng)建,函數(shù)執(zhí)行結(jié)束時(shí)這些存儲(chǔ)單元自動(dòng)被釋放。棧內(nèi)存分配運(yùn)算內(nèi)置于處理器的指令集中,效率很高,但是分配的內(nèi)存容量有限。

:就是那些由new分配的內(nèi)存塊,他們的釋放編譯器不去管,由我們的應(yīng)用程序去控制,一般一個(gè)new就要對(duì)應(yīng)一個(gè)delete。如果程序員沒(méi)有釋放掉,那么在程序結(jié)束后,操作系統(tǒng)會(huì)自動(dòng)回收。

自由存儲(chǔ)區(qū):就是那些由malloc等分配的內(nèi)存塊,他和堆是十分相似的,不過(guò)它是用free來(lái)結(jié)束自己的生命的。

全局/靜態(tài)存儲(chǔ)區(qū):全局變量和靜態(tài)變量被分配到同一塊內(nèi)存中,在以前的C語(yǔ)言中,全局變量又分為初始化的和未初始化的,在C++里面沒(méi)有這個(gè)區(qū)分了,他們共同占用同一塊內(nèi)存區(qū)。

常量存儲(chǔ)區(qū):這是一塊比較特殊的存儲(chǔ)區(qū),他們里面存放的是常量,不允許修改。

如果想要更詳細(xì)的了解C++的內(nèi)存管理,請(qǐng)參閱《C++內(nèi)存管理詳解》。

并且在現(xiàn)代C++編程中,智能指針給我們?cè)谫Y源管理上帶來(lái)了很多好處。

在工作中,我們常常會(huì)用智能指針來(lái)管理資源,其中最常用的就是引用計(jì)數(shù)類智能指針了(shared_ptr)。

資源共享型的智能指針有兩種實(shí)現(xiàn),一種是侵入式,一種是非侵入式。

如果希望詳細(xì)了解C++的智能指針,請(qǐng)參閱《C++引用計(jì)數(shù)計(jì)數(shù)及智能指針的簡(jiǎn)單實(shí)現(xiàn)》

最后編輯于
?著作權(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)容