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

《深度探索 C++ 物件模型》讀書筆記(6):物件建構/解構、new/delete 與陣列

     編輯:關於C++

物件建構/解構時機

盡可能縮小物件作用域,減少不必要建構/解構開銷。

全域物件靜態初始化

  1. 產生 _sti_...() 呼叫建構子
  2. 產生 _std_...() 呼叫解構子
  3. main() 前後分別插入 _main()/_exit() 呼叫上述函數

建議避免需靜態初始化的全域物件。

區域靜態物件

首次呼叫函數時建構,程式結束時解構 (放入全域資料段)。編譯器插入守衛旗標確保只建構一次。

陣列建構與預設參數

complex c_array[10]; 編譯器產生內部無參建構子 complex::complex() { complex(0.0, 0.0); },再呼叫 vec_new 逐元素建構。

new/delete 轉換

Point3d *origin = new Point3d;
// →
Point3d *origin;
if (origin = _new(sizeof(Point3d))) {
    try { origin = Point3d::Point3d(origin); }
    catch (...) { _delete(origin); throw; }
}

陣列 delete 陷阱

Point *ptr = new Point3d[10]; // 錯誤!
delete []ptr; // 只呼叫 Point::~Point,大小不符導致崩潰

解決:逐元素 delete 或避免基類指標指向衍生類陣列。

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