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

BCB 動態建立 VCL 控制項陣列 (二):TList 實作與資源釋放

     編輯:關於C++

背景回顧

上篇介紹雙重指標實作 VCL 控制項陣列,網友指出 TList 釋放資源問題。本文提供 TList 正確釋放方案並比較兩種方法優劣。

TList 實作完整程式碼

建立控制項並加入 TList

// 宣告:TList *buttons = new TList;

for (int i = 1; i <= ButtonCount; i++) {
    TSpeedButton *spdBtn = new TSpeedButton(this);
    spdBtn->Parent = ScrollBox;           // 指定父控制項
    spdBtn->Caption = IntToStr(i);
    spdBtn->Width = 80;
    spdBtn->Height = 80;
    spdBtn->OnClick = ButtonClick;
    spdBtn->Left = intLeft;
    spdBtn->Top = intTop;
    spdBtn->GroupIndex = 1;
    spdBtn->Flat = true;
    intLeft += 80 + intSpace;
    if (i % LineCount == 0) {
        intTop += 80 + intSpace;
        intLeft = intSpace;
    }
    buttons->Add(spdBtn);  // 加入 TList
}

正確釋放 TList 中所有控制項

int num = buttons->Count;
for (int i = 0; i < num; i++) {
    delete (TSpeedButton *)buttons->Items[i];  // 強制轉型後刪除
}
// 最後釋放 TList 本身
delete buttons;

關鍵點解析

  • TList->Items 回傳 void*,C/C++ 中 void* 可隱性轉換為任何指標型別。
  • 使用 (TSpeedButton*) 強制轉型後呼叫 delete,正確呼叫解構函數並釋放記憶體。
  • (TObject*) 同理可行,因 TObject 為所有 VCL 類別基類,基類指標可指向衍生類物件。

兩種方法比較

維度雙重指標 (TButton**)TList 容器
本質典型 C++ 解法C++ Builder / VCL 風格解法
彈性/效能雙重指標靈活、高效稍低,但可接受
可讀性多重指標難理解容器介面直觀易懂
功能豐富度手動管理享有 TList 方法 (排序、搜尋、插入/刪除)
記憶體管理手動 delete[] 陣列 + 逐項 delete逐項 delete + delete 容器

結論

兩種方法各有優劣:追求極致效能與控制選雙重指標;重視程式碼清晰、維護性與 VCL 整合選 TList。具體採用哪種,視專案需求與個人偏好決定。

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