盡可能縮小物件作用域,減少不必要建構/解構開銷。
_sti_...() 呼叫建構子_std_...() 呼叫解構子main() 前後分別插入 _main()/_exit() 呼叫上述函數建議避免需靜態初始化的全域物件。
首次呼叫函數時建構,程式結束時解構 (放入全域資料段)。編譯器插入守衛旗標確保只建構一次。
complex c_array[10]; 編譯器產生內部無參建構子 complex::complex() { complex(0.0, 0.0); },再呼叫 vec_new 逐元素建構。
Point3d *origin = new Point3d;
// →
Point3d *origin;
if (origin = _new(sizeof(Point3d))) {
try { origin = Point3d::Point3d(origin); }
catch (...) { _delete(origin); throw; }
}
Point *ptr = new Point3d[10]; // 錯誤!
delete []ptr; // 只呼叫 Point::~Point,大小不符導致崩潰
解決:逐元素 delete 或避免基類指標指向衍生類陣列。