stdlib的free()函數不適用於stl變量。 有沒有一種常見的方式來釋放由stl(像矢量,地圖,集等)舉起的空間?釋放stl所佔用的空間
回答
STL對象自動處理自己的釋放。當一個STL對象超出作用域時,它的析構函數將被運行,這將實現必要的釋放。正如FrédéricHamidi在評論中指出的那樣,如果在堆上分配,您應該自己釋放對象。在C++中建議使用new/delete而不是C的malloc/free組合。
除非它通過'new'運算符被分配在堆上。 –
@FrédéricHamidi:免費店鋪* –
@光,免費商店是正確的術語,是的,我站在更正:) –
free
是一個C函數,不調用析構函數;因此,它在C++中幾乎總是錯誤的。 delete
在C++中是等效的。
儘管如此,你應該在這裏做什麼取決於你的意思是「STL變量」。如果你的意思是C++標準庫對象,那麼你去分配他們以同樣的方式使用C你去分配任何對象++:
如果沒有手動內存管理對象,無能爲力 ;
int main() { std::vector<int> v{0,1,2}; }
如果手動與
new
創建它的內存管理的對象,你可以使用delete
;int main() { std::vector<int>* ptr = new std::vector<int>(); ptr->push_back(0); ptr->push_back(1); ptr->push_back(2); delete(ptr); } // (PLEASE don't do this)
如果手動內存管理由在陣列中與
new[]
它創建的對象,使用delete[]
。int main() { std::vector<int>* ptr = new std::vector<int>[1]; ptr[0].push_back(0); ptr[0].push_back(1); ptr[0].push_back(2); delete[](ptr); } // (PLEASE don't do this either)
然而,在情況2和3,你應該真正使用了智能指針代替,如std::unique_ptr
或std::shared_ptr
;手動內存管理是不好!
你不應該嘗試手動內存管理C++標準庫容器內的任何元素,容器擁有這些和意志已經免費了需要記憶:
int main()
{
std::vector<int> v{0,1,2};
delete &v[0];
} // (So, so wrong)
你可以滾你自己分配器以您自己的方式管理容器內的對象。
http://www.codeproject.com/Articles/4795/C-Standard-Allocator-An-Introduction-and-Implement
一些分配器是準備使用(看看的boost ::池)
- 1. mergeChangesFromContextDidSaveNotification佔用所有空間
- 2. STL向量釋放
- 3. ScrollView minHeight佔用所有空間
- 4. Zimbra不釋放空間
- 5. 什麼時候變量佔用的空間在C++中被釋放?
- 6. 關閉時,任務欄佔用的空間被阻止並且不會釋放
- 7. 在oracle中釋放USERS表空間的未使用空間
- 8. 內容佔用頁眉和頁腳之間的所有空間
- 9. OpenFeint磁盤空間佔用空間
- 10. 無法在我的彈出功能中釋放/釋放空間?
- 11. 釋放stl容器中的opencv圖像?
- 12. 釋放SQL Server中的空間
- 13. UIImagePickerController不釋放內存佔用
- 14. MongoDB佔用太多空間?
- 15. 自動佔用空間
- 16. AllegroGraph佔用磁盤空間
- 17. SetVisible(false)佔用空間
- 18. 隱藏JQGrid佔用空間
- 19. 確保組件佔用了SplitPane中的所有可用空間
- 20. UIWebView佔用UiNavigationController中的所有可用空間
- 21. 靈活的寬度按鈕不佔用所有可用空間
- 22. CUDA共享內存佔用比所需空間多兩倍的空間
- 23. Oracle 10g - 無法釋放表空間中的空間
- 24. 釋放內存包含STL類
- 25. 以不佔用舊空間的方式縮放css3
- 26. ZODB不釋放硬盤空間
- 27. 如何在hadoop中釋放dfs空間?
- 28. mysql:如何釋放空間(innodb)
- 29. 如何釋放內存空間?
- 30. memsql如何從plancachedir釋放空間
你沒有(在大多數情況下) – P0W
您是否在尋找類似的'delete'運算符(如果您的STL容器分配在堆上)? –
@POW所以C++有自動垃圾收集? – ishan3243