覆盖类实现中

时间:2017-02-22 04:33:13

标签: c++ memory queue

我正在尝试使用顺序列表实现队列。但是,对于具有字符串元素的队列,程序崩溃。

以下是Queue构造函数的相关部分:

{
  string *ptr = new string[num];
}

在寻找一段时间之后,我怀疑问题在于析构函数。在调用析构函数时,我正在删除顺序列表的数组指针并将其设置为NULL:

{
  delete ptr;
  ptr = NULL;
}

但是,由于字符串库提供了一个默认的析构函数,它会删除该字符串,然后我尝试删除一个不存在的指针。我认为这将访问无法访问的内存,这会导致分段错误。队列实现非常适合int和double目前的情况。

我正在使用int,double和string元素类型的模板。如果析构函数为空,则不会为int和double元素Queues动态释放内存。

除了拥有一个空的类析构函数并使用默认的字符串析构函数之外,还有什么简单的方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

delete仅删除非简单类型的第一个实例。 delete []为所有实例调用dtors

我不知道这里的全部范围,但仅仅是为了注释,删除nullptr是明确定义的,并没有做任何事情。