首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ QList::clear() 實現:*this = QList() 臨時對象賦值清空

     編輯:程式設計綜合問答

源碼


template 
inline void QList::clear() {
    *this = QList(); // 創建臨時空列表,賦值給當前對象
}

原理

  1. QList() 調用默認構造函數創建一個空的臨時對象。
  2. *this = ... 調用賦值運算符,將臨時對象的內部數據(指针、大小等)移動/複製給當前對象。
  3. 臨時對象生命周期結束,析構函數釋放其原有資源(此處為空無操作)。
  4. 當前對象變為空狀態,原有元素內存由賦值運算符內部釋放(或引用計數減少)。

等效寫法


void clear() {
    QList tmp; // 空列表
    swap(tmp);    // 交換內部指針,O(1) 更高效
}
// 或 C++11 移動語義
*this = QList(); // 依賴 move assignment

注意

此寫法依賴賦值運算符正確實現資源轉移。若類未正確實現 Rule of Three/Five,可能導致雙重釋放或洩漏。Qt 內部類均正確實現。

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