EffectiveC 一些心得

2021-09-12 09:24:26 字數 1156 閱讀 9922

effective c++也看了好多遍了,但一直走馬觀花的看,不久就忘了,最近想重拾起來寫點心得,

3.11

resource management

首先是智慧型指標

在c++11之前auto_ptr是智慧型指標的主流,滿足raii的所有要求。

raii的概念其實也不難(下面大段抄襲概念)

raii是c++的發明者bjarne stroustrup提出的概念,raii全稱是「resource acquisition is initialization」,直譯過來是「資源獲取即初始化」,也就是說在建構函式中申請分配資源,在析構函式中釋放資源。因為c++的語言機制保證了,當乙個物件建立的時候,自動呼叫建構函式,當物件超出作用域的時候會自動呼叫析構函式。所以,在raii的指導下,我們應該使用類來管理資源,將資源和物件的生命週期繫結。

簡單來說就說不用因為自身疏忽忘記寫delete導致大段的記憶體洩漏,laziness is the first productivity。

auto_ptr有乙個很致命的缺點不能讓多個物件指向乙個指標,這樣會導致乙個物件被刪除多次,導致未定義行為。為了防止這種行為,auto_ptr就在複製拷貝函式動了手腳,如果原指標使用了拷貝建構函式,那麼原指標就會指向nullptr,新指標唯一擁有資源。這造成了一定的麻煩。

c++11引入了unique_ptr作為高階版。auto_ptr的拷貝建構函式不大符合直觀感受,因此unique_ptr直接禁用了拷貝建構函式。此外auto_ptr不支援stl容器,unique支援stl容器。此外unique_ptr也支援作為函式返回值。

shared_ptr作為另乙個方面的高階版,支援乙個指標指向多個物件,具體是通過引用計數法實現的,具體實現可以看網上各位大佬的**,也就是說允許多個該智慧型指標共享第「擁有」同一堆分配物件的記憶體,這通過引用計數(reference counting)實現,會記錄有多少個shared_ptr共同指向乙個物件,一旦最後乙個這樣的指標被銷毀,也就是一旦某個物件的引用計數變為0,這個物件會被自動刪除。

weak_ptr 是一種不控制物件生命週期的智慧型指標, 它指向乙個 shared_ptr 管理的物件. 進行該物件的記憶體管理的是那個強引用的 shared_ptr. weak_ptr只是提供了對管理物件的乙個訪問手段.。更多是用來接迴圈引用的問題。

對於資源管理類很重要的一點就是如何管理其拷貝,一般採取禁止拷貝和引用計數的方法。

IOCP的一些心得

iocp的工作執行緒的個數一般設定為processors 2 2,這是綜合考慮了工作執行緒可能是等待 掛起 正在執行的狀態。如果你測試出更好的結果,以你的為標準。iocp的工作執行緒由系統排程和優化,不要去干預執行緒的排程,除非你自信能超越系統的排程。在遇到奇怪的問題時,可以嘗試減少iocp工作執行...

Qt 的一些心得

一.背景刷成黑色,前景色設為白色。方法一 paltette方式,經測試,該方法不會影響到其他控制項,推薦使用 qpalette bgpal palette bgpal.setcolor qpalette background,qcolor 0,0 0,255 qpalette background,...

C 的一些心得

一 sqlite sqlite,是一款輕型的資料庫,是遵守acid的關聯式資料庫管理系統,它的設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它占用資源非常的低,在嵌入式裝置中,可能只需要幾百k的記憶體就夠了。它能夠支援windows linux unix等等主流的作業系統,同時能夠跟很...