【Qt】QVector對儲存資料的釋放
QVector對儲存資料的釋放
本文介紹使用Qt的QVector對儲存資料的釋放,包括儲存自動變數指標變數兩個方面。
一、QVector對自動變數的釋放
QVector中的內建有記憶體管理,當 QVector生命週期結束,它的解構函式會把QVector中的元素銷燬,並釋放它們所佔用的空間,所以用QVector一般不用顯式釋放 。但是當QVector儲存資料相當大時候,並且對資料進行了一些操作,比如刪除後,如果我們能積極主動的去釋放記憶體,那麼是非常明智高效。
我們的操作方法是:
m_vecItems.clear();
QVector<Custom>().swap(m_vecItems);
這裡使用空的自定義型別的QVector來交換原向量,從而達到對QVector容量的清零。
當然如果用C++11的std::vector那麼也可以這樣釋放:
m_vecItems.clear();
m_vecItems.shrink_to_fit();
二、QVector對指標變數的釋放
如果你QVector 中存放的是指標,那麼當 QVector 銷燬時,那些指標指向的物件不會被銷燬,那些記憶體不會被釋放,這時需要自己來釋放這些動態分配的記憶體,方法是:
for(auto it = m_vecItems.begin(); it != m_vecItems.end(); ++it)
{
if(*it != nullptr)
{
delete (*it);
(*it) = nullptr;
}
}
m_vecItems.clear();
QVector<Custom*>().swap(m_vecItems);
2018-10-29補充:
Qt之中,在QtAlgorithms裡面有個函式,qDeleteAll,其本身有兩個過載:
1)void qDeleteAll(ForwardIterator begin, ForwardIterator end)
用法如下:
QList<Employee *> list;
list.append(new Employee("Blackpool", "Stephen"));
list.append(new Employee("Twist", "Oliver"));
qDeleteAll(list.begin(), list.end());
list.clear();
2)void qDeleteAll(const Container &c)
也就是可以直接清空一個容器,比如QList、QVector等。
用這些Qt自帶的函式,在本身框架裡更簡單。但是最上面的用法其實是C++的用法,在哪裡都可以這麼用。
有何不足,也歡迎批評指教!記錄只為更好的總結與分享!
相關文章
- 禪道 - 儲存空間釋放
- Qt容器類QList、QLinkedList和QVector類QT
- 深耕物件儲存 ECS釋放海量非結構化資料新價值物件
- set unused 是否會釋放儲存空間
- 表資料的儲存對索引的影響索引
- TIDB儲存TiKV的鍵值對資料TiDB
- 檔案系統儲存與oracle資料庫儲存對比Oracle資料庫
- 資料儲存--檔案儲存
- 私有云對資料儲存環境的好處
- 資料儲存--面向列的儲存設計
- 資料儲存
- 聚焦資料時代新儲存需求,浪潮儲存的新儲存之道
- 資料儲存(1):從資料儲存看人類文明-資料儲存器發展歷程
- Hibernate學習(三)一對多資料的儲存
- 資料的儲存區域
- 有效儲存資料的方法
- python的資料儲存Python
- iOS中的資料儲存iOS
- 資料儲存:CoreData
- iOS 資料儲存iOS
- IOS資料儲存iOS
- Android中的資料儲存之檔案儲存Android
- iOS開發資料儲存篇—iOS中的幾種資料儲存方式iOS
- 資料儲存加密的主流方案對比與難點解析加密
- Alter修改表結構對資料儲存的影響PP
- 面對海量的監控影片資料應該如何儲存?
- 儲存資料鍵和專案對的類(Dictionary物件) (轉)物件
- 大資料時代對儲存發展需要哪些要求大資料
- 大資料儲存系統對比:Ceph VS Gluster大資料
- Flutter持久化儲存之資料庫儲存Flutter持久化資料庫
- 資料儲存(歸檔解檔,沙河儲存)
- 【儲存資料恢復】NetApp儲存誤刪資料夾的資料恢復案例資料恢復APP
- 服務端指南 資料儲存篇 | 選擇合適的資料儲存方案服務端
- 小儲存容量手機有救了!Android 新歸檔功能可釋放 60% 儲存空間Android
- MySQL儲存毫秒資料的方法MySql
- 伺服器資料的儲存伺服器
- 資料儲存的三種方式
- Android中的資料儲存Android