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

More Effective C++:避免無意義的缺省構造函數

     編輯:關於C++

缺省構造函數(無參構造)能「無中生有」初始化對象。適合類數值類型、容器(空初始化),但**許多領域對象強制需外部數據**(如設備必須有公司 ID)。

無缺省構造的三大限制及對策

  1. 無法直接定義數組:
    EquipmentPiece bestPieces[10]; // 錯誤
        EquipmentPiece *bestPieces = new EquipmentPiece[10]; // 錯誤
    對策三種:
    • 定義時逐個構造:EquipmentPiece arr[] = { EquipmentPiece(ID1), ... };(僅非堆數組)
    • **指針數組**替代對象數組:EquipmentPiece* arr[10]; 後逐個 new(需手動刪除、額外指針空間)
    • **原始內存 + placement new**:分配原始字節數組,new (&arr[i]) EquipmentPiece(ID) 構造;銷毀時逆序調用析構函數 + operator delete[] 釋放原始內存。最高效但複雜、易錯。
  2. 不兼容眾多模板容器:模板常內部 new T[size] 要求缺省構造。std::vector 無此要求,但許多舊/簡陋模板有。長期看模板設計成熟後問題緩解。
  3. 虛基類兩難:無缺省構造的虛基類要求**所有派生類(無論層級)必須知曉並傳遞構造參數**,極其痛苦。妥協方案:提供無意義缺省構造(如 ID = UNSPECIFIED),但導致成員函數須檢查有效性、拋異常、效率/代碼膨脹、失去「構造即有效」保證。

結論

**缺省構造函數若無法保證對象有意義初始化,寧缺勿濫**。雖帶來使用限制,但換來正確性保證、效能、代碼簡潔。使用時雖受限,但能信任對象狀態——這才是專業工程態度。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved