[問題] Struct內vector的記憶體釋放?

看板C_and_CPP (C/C++)作者 (超黑城市)時間8年前 (2018/04/09 16:33), 8年前編輯推噓5(5012)
留言17則, 5人參與, 8年前最新討論串1/1
開發平台(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

04/09 16:52, 8年前 , 1F
vector是動態產生的嘛?
04/09 16:52, 1F

04/09 16:53, 8年前 , 2F
如果你沒有用 vector A = new vector 這種方式產生vector
04/09 16:53, 2F

04/09 16:54, 8年前 , 3F
照理說 不用去擔心memory的問題
04/09 16:54, 3F
vector在c++內不是要另外去swap才會釋放嗎? 所以不知道是不是在struct內也是需要

04/09 16:54, 8年前 , 4F
裡面是宣告固定的 vector<int> Vecitem; 這樣
04/09 16:54, 4F
※ 編輯: blackcity (114.34.229.118), 04/09/2018 16:56:36

04/09 16:57, 8年前 , 5F
恩 那就不用擔心了 , 但還是要注意效能的問題 參考
04/09 16:57, 5F

04/09 16:58, 8年前 , 6F
04/09 16:58, 6F

04/09 17:00, 8年前 , 7F
另外 swap的問題可以用 std::vector裡面的non-member func
04/09 17:00, 7F

04/09 17:01, 8年前 , 8F
std::swap 參考 https://bit.ly/2qiTLuq
04/09 17:01, 8F
OK~了解 感謝大大 ※ 編輯: blackcity (114.34.229.118), 04/09/2018 17:02:33

04/09 19:58, 8年前 , 9F
請使用shrink_to_fit
04/09 19:58, 9F
這個好像要安裝VC11,目前沒有安裝其他插件的打算

04/09 21:23, 8年前 , 10F
會這樣問表示你不懂STL container的意義
04/09 21:23, 10F

04/09 21:24, 8年前 , 11F
你想釋放的是vector這個container本身還是
04/09 21:24, 11F

04/09 21:24, 8年前 , 12F
你想釋放vector的capacity?
04/09 21:24, 12F
抱歉,我的確不太懂。我想釋放的是整個struct所佔用的memory,因為看到vector需要 額外作swap才能釋放,所以擔心struct內的vector也需要額外的處理

04/10 00:29, 8年前 , 13F
不需要釋放
04/10 00:29, 13F
※ 編輯: blackcity (114.34.229.118), 04/10/2018 09:15:16 ※ 編輯: blackcity (114.34.229.118), 04/10/2018 09:15:39

04/10 09:27, 8年前 , 14F
為啥要swap 才能釋放記憶體?
04/10 09:27, 14F

04/10 11:32, 8年前 , 15F
完全不用 vector就是會自動管理記憶體
04/10 11:32, 15F

04/10 11:32, 8年前 , 16F
甚至要說swap是錯誤的用法也不為過
04/10 11:32, 16F

04/10 11:32, 8年前 , 17F
你只要管好你的MyStruct本身
04/10 11:32, 17F
想說C/C++的記憶體釋放、管理都需要自行處理 之前上網查是說如果用push_back的方式,就算下clear所佔的記憶體空間也不會釋放 所以才查到用swap去釋放 結果看來應該是完全不需要額外對vector作處理 struct只要不是用new的方式宣告,應該也不需要去作其他的的處理了 ※ 編輯: blackcity (114.34.229.118), 04/11/2018 14:34:21
文章代碼(AID): #1QooLAmh (C_and_CPP)
文章代碼(AID): #1QooLAmh (C_and_CPP)