簡體   English   中英

C ++方法變量聲明

[英]C++ method variable declaration

目前,我正在研究此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僅分配一次,請參考。

每次您進入函數時都會創建該vector並在離開作用域時(函數結束時)將其銷毀(破壞所有對象並釋放所有內存)。 沒有泄漏,但是如果您頻繁調用該函數,則會有很多分配和釋放。

您有兩種解決方案可以避免這種情況:

  • (首選)將此向量設為一個類字段(具有mutable屬性以便允許通過const方法對其進行更改),
  • 將此向量設為靜態變量。

只要Thing的析構函數和其他成員函數(尤其是復制構造函數,因為其用於vector內務處理)正確地實現了其數據成員的所有內存,則要做的就是在每次調用the時創建一個新的vector<Thing>功能。

將得到的局部變量things被正確地釋放,包括每破壞Thing件,當變量超出范圍(即,在功能退出)。

在沒有看到方法和Thing所有代碼的情況下,要確定性是不可能的,但是這種用法表面上是正確的。

“事物”是局部自動變量。 另一篇文章對此有一個答案: 本地,全局,靜態,自動,寄存器,外部,常量,易失性變量存儲在哪里?

那是該功能的地方。 當它超出范圍時,它將自行分配內存。 所有的STL容器都可以。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM