C++new的工作方式
如果申請的是普通的內建型別的空間
1、如果是申請的是0byte,強制轉換為1byte
2、使用名為operator new 的標準庫函式,如果是陣列則呼叫名為operator new[]的標準庫函式,申請相對應的空間,如果沒有足夠的空間或其他問題且沒有定義_new_hanlder,那麼會丟擲bad_alloc的異常並結束程式
3、如果定義了_new_hanlder回撥函式,那麼會一直不停的呼叫這個函式直到問題被解決為止。
4、記憶體申請成功,返回申請到的記憶體的首地址。
如果申請的是類的空間
1、如果是申請的是0byte,強制轉換為1byte
2、使用名為operator new的標準庫函式,如果是陣列則呼叫名為operator new[]的標準庫函式,申請相對應的空間,如果沒有足夠的空間或其他問題且沒有定義_new_hanlder,那麼會丟擲bad_alloc的異常並結束程式
3、如果定義了_new_hanlder回撥函式,那麼會一直不停的呼叫這個函式直到問題被解決為止。
4、如果這個類沒有定義任何建構函式,解構函式,且編譯器沒有合成,那麼下面的步驟跟申請普通的內建型別是一樣的。
5、如果有建構函式或者解構函式,那麼會呼叫一個庫函式,具體什麼庫函式依編譯器不同而不同,這個庫函式會回撥類的建構函式。
6、如果在建構函式中發生異常,那麼會釋放剛剛申請的空間並返回異常
7、返回申請到的記憶體的首地址
注意上面的operator new標準庫函式跟new表示式的區別!!!!!!
我們可以通過set_new_hanlder去設定_new_hanlder,具體做法如下:
void hanldermemory(){;}
set_new_hanlder(hanldermemory);這隻回撥函式為hanldermemory
或者set_new_hanlder(NULL);這裡沒有設定回撥函式
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29012686/viewspace-1164448/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- git的工作方式使用Git
- Apache下PHP的幾種工作方式ApachePHP
- istio sidecar 工作方式IDE
- 當遠端工作成為未來的工作方式
- 改變開發者工作方式的15種技術
- 豌豆莢的員工工作方式是什麼樣的?
- SQL Server 的備份和恢復模式的工作方式SQLServer模式
- 深入瞭解Kubernetes REST API的工作方式RESTAPI
- 讓上司最滿意的工作方式是什麼?
- AI正在改變專案經理的工作方式AI
- 移動OA,讓你感受不一樣的工作方式
- 實時渲染將如何改變工作方式
- 波士頓諮詢:解碼全球工作方式
- InnoDB儲存引擎——Master Thread工作方式儲存引擎ASTthread
- Redis快取刪除驅逐策略的工作方式 - codemancersRedis快取
- SQL Server 中備份的還原和恢復工作方式SQLServer
- Web基礎_0x00_Web工作方式Web
- 以靈活應萬變:未來的工作方式(附下載)
- 從HTTP請求響應迴圈探索Flask的基本工作方式HTTPFlask
- 物聯網將改變人們工作方式的十個理由
- Go For Web:踏入Web大門的第一步——Web 的工作方式GoWeb
- 資料泵不同工作方式效能比較(六)
- 資料泵不同工作方式效能比較(五)
- 資料泵不同工作方式效能比較(四)
- 資料泵不同工作方式效能比較(三)
- 資料泵不同工作方式效能比較(二)
- 資料泵不同工作方式效能比較(一)
- 人力資源實現自動化後,HR的工作方式是怎樣的
- IP骨幹網路技術MPLS的起源、工作方式和主要應用-VeCloudCloud
- DNS 系列(二):DNS 記錄及工作方式,你瞭解嗎?DNS
- 亞馬遜雲科技宣佈推出Amazon Q重塑未來工作方式亞馬遜
- 雙通道-程控絕緣測試電阻箱主要工作方式
- Docker四種方式改變了軟體工程師過去五年的工作方式Docker軟體工程工程師
- 融雲猿桌派備忘錄,那些被程式設計師 Pick 的工作方式程式設計師
- Powerbuilder6.0實現 Browser/Server結構的Internet解決方案和工作方式 (轉)UIServer
- 一週工作四天?人機協同正成為未來工作方式
- LSTM入門必讀:從入門基礎到工作方式詳解
- 創新工作方式:低程式碼拖拉拽實現業務流程智慧化