1. 先配制足夠的空間給 container
2. 開始存取運用 container 內的資料
3. 呼叫 clear 清空 container 的資料以便下次再度利用這個 container
一般我們可能會假設一呼叫 clear() 後 container 就會釋放所配置的資源,但在這種情境下就很容易出現頻繁記憶體配置與釋放。但這實際上是可以避免得,我們其實只要把儲存在 container 中的資料解構使其所利用的資源變成 raw memory,下次要再度使用時只要重新建構即可,如此一來我們即可省去記憶體是放與配置的冗長時間。基於這個理由,呼叫 STL container 的 clear() 其實不一定會釋放所持有的資源,可能僅僅將所儲存的資料解構而已,因此如果今天想要確保 container 必定會釋放所持有的資源的話可以這樣做 (以下用 vector 做範例說明):
std::vector<int> vec;
// some operations
vec.swap(std::vector<int>());
當然更好的做法就是讓變數的 scope & 生命週期盡可能的小使其直接呼叫 destructor 來釋放資源囉。
沒有留言:
張貼留言