[英]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.