簡體   English   中英

新的和刪除的經驗法則

[英]rule of thumb for new and delete

我想知道newdelete的經驗法則是什么。 我一直以為,每次調用new ,都應該delete

在以下情況下,如果我包含destructor ,則會收到嚴重的過量錯誤。 如果我不包含destructor ,則我的代碼可以正常工作。

struct Foo
 {
     Foo(int A, int B)
     {
          bar = new std::vector< std::vector < int > >(A, std::vector<int>(B,2);
          //creates a vector of A vectors where each nested vector contains the number 2 B times. 
     }

     ~Foo() //Get bad access error if destructor included in code. 
     {
          delete[] bar;
     }     

     std::vector< std::vector < int > > *bar;
 };

int main()
{
    Foo X;

    return 0;
}

應該是delete bar; delete [] bar;

將另一條規則添加到您的規則列表。

僅當新行具有[some number]時,刪除行才應具有[]。

您的情況下, new行沒有[some number]

 bar = new std::vector< std::vector < int > >(A, std::vector<int>(B,2);

因此,您的刪除行也不應包含一個。

上面的類可能寫得更好:

struct Foo   
 {
     Foo(int A, int B)
       :  bar(A, std::vector<int>(B,2)) //creates a vector of A vectors where each nested vector contains the number 2 B times. 
     {}
     // Default copy
     // Default destructor.

     std::vector< std::vector < int > > bar;
 };

這避免了顯式的newdelete 通常是正確使用它們的最佳rule of thumb

對於像c ++這樣的非托管代碼,經驗法則是您設計所需要的。

通常,清理對象以避免內存泄漏是一個好主意,但是您可能會希望將某些內容保留在內存中。

暫無
暫無

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

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