[英]rule of thumb for new and delete
我想知道new
和delete
的經驗法則是什么。 我一直以為,每次調用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;
};
這避免了顯式的new
和delete
; 通常是正確使用它們的最佳rule of thumb
!
對於像c ++這樣的非托管代碼,經驗法則是您設計所需要的。
通常,清理對象以避免內存泄漏是一個好主意,但是您可能會希望將某些內容保留在內存中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.