繁体   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