考虑以下代码:
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();
}怎样才是正确的析构函数?
现在,我有了这个:
Search::~Search()
{
for(int i = 0; i < tam; i++)
{
delete openList[i]
}
delete[] openList;
}但是,当我递归地执行这段代码时(有时在init中,有时在析构函数中),这段代码会破坏我的程序。这是不正确的。
有什么想法吗?
非常感谢:)!
发布于 2016-03-21 03:21:18
您违反了rule of three,这是防止您自己破坏代码的标志。
因为你有一个用户定义的析构函数,所以你几乎肯定需要一个用户定义的复制构造函数和一个用户定义的operator=()重载。让我们为您的代码实现最简单的版本,即禁止这些转换:
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;
}https://stackoverflow.com/questions/36118257
复制相似问题