首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++指针数组:如何删除

C++指针数组:如何删除
EN

Stack Overflow用户
提问于 2016-03-21 03:11:08
回答 1查看 47关注 0票数 0

考虑以下代码:

代码语言:javascript
复制
class Search
{
    List** openList;
    int tam;

    Search(int t)
    {
        tam = t;
        openList = new List*[tam];
        for (int i = 0; i < tam; i++)
        {
            openList [i] = new List();
        }
    }

    virtual ~Search();
}

怎样才是正确的析构函数?

现在,我有了这个:

代码语言:javascript
复制
Search::~Search() 
{
    for(int i = 0; i < tam; i++) 
    {
        delete openList[i]
    }
    delete[] openList;
}

但是,当我递归地执行这段代码时(有时在init中,有时在析构函数中),这段代码会破坏我的程序。这是不正确的。

有什么想法吗?

非常感谢:)!

EN

回答 1

Stack Overflow用户

发布于 2016-03-21 03:21:18

您违反了rule of three,这是防止您自己破坏代码的标志。

因为你有一个用户定义的析构函数,所以你几乎肯定需要一个用户定义的复制构造函数和一个用户定义的operator=()重载。让我们为您的代码实现最简单的版本,即禁止这些转换:

代码语言:javascript
复制
class Search {
  public:
    Search(int t) {
      tam = t;
      openList = new List*[tam];
      for (int i = 0; i < tam; i++)
      {
        openList [i] = new List();
      }
    }

    virtual ~Search() {
      for(int i = 0; i < tam; i++) 
        delete openList[i]
          delete[] openList;
    }

    Search & operator=(Search const &) = delete;
    Search(Search const &) = delete;

  private:
    List** openList;
    int tam;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36118257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档