class BST { ... };
class BalancedBST : public BST { ... };
void printBSTArray(ostream&, const BST array[], int n);
調用 printBSTArray(cout, bBSTArray, 10) 編譯通過,但運行時錯誤:
array[i] 展開為 *(array + i),指針增量按 sizeof(BST) 計算。BalancedBST 數組,元素大小為 sizeof(BalancedBST)(通常更大)。void deleteArray(ostream&, BST array[]);
BalancedBST* p = new BalancedBST[50];
deleteArray(cout, p); // 編譯器生成按 BST 大小步進調用 ~BST(),實際對象更大
結果:部分對象未正確析構、內存洩漏、堆損壞。
C++ 標準規定:通過基類指針刪除派生類數組 → 未定義行為。
BST 為抽象接口類(純虛析構、無數據),則無實例化,自然無數組問題。std::vector<std::unique_ptr<BST>>。std::variant、std::any)或固定大小緩衝區。