看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: Win10, Linux, ...) Win7 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) VS2012 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) n/a 問題(Question): 想請問一下Vector在Struct內的記憶體該如何才是完整正確的釋放? 我宣告了一個Struct裡面包含了Vector 1. 宣告Struct為物件 MyStruct StructItem; 2. 宣告Struct為指標 MyStruct *StructItem; StructItem = new StructItem(); delete StructItem; 請問這兩種方法,Struct內的Vector物件是不是都會完整的釋放 不需要額外再去對vector作Swap的動作? 另外問一下,Vector Swap前,Clear是必須的嗎? 謝謝~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.34.229.118 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1523262794.A.C2B.html
dzwei: vector是動態產生的嘛? 04/09 16:52
dzwei: 如果你沒有用 vector A = new vector 這種方式產生vector 04/09 16:53
dzwei: 照理說 不用去擔心memory的問題 04/09 16:54
vector在c++內不是要另外去swap才會釋放嗎? 所以不知道是不是在struct內也是需要
blackcity: 裡面是宣告固定的 vector<int> Vecitem; 這樣 04/09 16:54
※ 編輯: blackcity (114.34.229.118), 04/09/2018 16:56:36
dzwei: 恩 那就不用擔心了 , 但還是要注意效能的問題 參考 04/09 16:57
dzwei: http://t.cn/RmfRNZT 04/09 16:58
dzwei: 另外 swap的問題可以用 std::vector裡面的non-member func 04/09 17:00
dzwei: std::swap 參考 https://bit.ly/2qiTLuq 04/09 17:01
OK~了解 感謝大大 ※ 編輯: blackcity (114.34.229.118), 04/09/2018 17:02:33
bluesoul: 請使用shrink_to_fit 04/09 19:58
這個好像要安裝VC11,目前沒有安裝其他插件的打算
KanzakiHAria: 會這樣問表示你不懂STL container的意義 04/09 21:23
KanzakiHAria: 你想釋放的是vector這個container本身還是 04/09 21:24
KanzakiHAria: 你想釋放vector的capacity? 04/09 21:24
抱歉,我的確不太懂。我想釋放的是整個struct所佔用的memory,因為看到vector需要 額外作swap才能釋放,所以擔心struct內的vector也需要額外的處理
steve1012: 不需要釋放 04/10 00:29
※ 編輯: blackcity (114.34.229.118), 04/10/2018 09:15:16 ※ 編輯: blackcity (114.34.229.118), 04/10/2018 09:15:39
steve1012: 為啥要swap 才能釋放記憶體? 04/10 09:27
KanzakiHAria: 完全不用 vector就是會自動管理記憶體 04/10 11:32
KanzakiHAria: 甚至要說swap是錯誤的用法也不為過 04/10 11:32
KanzakiHAria: 你只要管好你的MyStruct本身 04/10 11:32
想說C/C++的記憶體釋放、管理都需要自行處理 之前上網查是說如果用push_back的方式,就算下clear所佔的記憶體空間也不會釋放 所以才查到用swap去釋放 結果看來應該是完全不需要額外對vector作處理 struct只要不是用new的方式宣告,應該也不需要去作其他的的處理了 ※ 編輯: blackcity (114.34.229.118), 04/11/2018 14:34:21