2010-12-04 128 views
1

目前我正在研究這個C++源代碼。我不是一個C++開發人員。C++方法變量聲明

void SomeClass::SomeMethod() const 
{ 
    vector<Thing> things(count); 

    ... 
    //Elements are added or replaced in things but no deallocation of things here 
} 

SomeMethod被稱爲很多次。任何人都可以確認沒有泄漏,things只分配一次,敬請參閱。

+1

它每次調用分配一次函數。沒有更多的代碼,你無法得到正確的答案,無論這種用法是正確的還是可以用內存分配和釋放中花費較少的東西代替。 – 2010-12-04 15:51:46

回答

5

vector是每次進入函數時創建的,並且當它離開作用域時(函數結束時)銷燬(銷燬所有對象並釋放所有內存)。沒有泄漏,但如果您經常調用該函數,則會有大量的分配和釋放。

您有2個解決方案,以避免:

  • (優選)(以允許它通過const方法改變與屬性mutable)使此載體類字段,
  • 使此矢量一個靜態變量。正確處理所有的存儲器,用於其數據成員
+1

+1,但表示一旦設置了成員或靜態,就必須添加一些管理代碼來限制重新分配,首先通過使用向量的reserve()函數,然後嘗試從開始和結束後獲取最大大小確保矢量在新的使用之前被清除。 – Klaim 2010-12-04 15:47:56

2

提供Thing正確只要實現它的析構函數和其他成員函數(因爲這是在vector看家使用尤其是拷貝構造函數),這是什麼會做的是創建每個新vector<Thing>調用該函數。

生成的本地變量things被正確釋放,包括當變量超出範圍時(即在函數退出時)破壞每個Thing成員。

如果沒有看到方法和Thing中的所有代碼,這是不可能更明確的,但是這種用法在表面上是正確的。

1

這奠定了該功能。當它超出範圍時,它將自己去除內存;所有的STL容器都可以。