首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

Effective C++ 條款 10:自定義 operator new 必須配套 operator delete

     編輯:C++ 入門

Effective C++ 條款 10:operator new/delete 成對實現的必然性

自定義 `operator new` 通常為效率:默認 new 分配塊頭記錄大小供 delete 使用,小對象浪費空間與時間。自定義 new 往往用內存池:預分配大塊,切分固定大小塊,無塊頭開銷。但這導致默認 delete 無法識別塊大小,必須配套實現 operator delete 對應釋放邏輯。

內存池實現示例

class Pool {
    void* block; int BLOCK_SIZE; void* freeList;
public:
    Pool(size_t n, int sz) : BLOCK_SIZE(sz) {
        block = ::operator new(n*sz);
        for(int i=0;i

關鍵點總結

  • new/delete 成對:new 的分配策略決定 delete 的釋放策略。
  • 內存池適用於大量小對象、固定大小、頻繁創建銷毀場景。
  • 生產級內存池需處理:超容量回退 malloc、重複釋放檢測、線程安全、對齊要求。
  • placement new 形式 `new(ptr) T` 不需配套 delete(不分配內存,只構造)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved