【问题标题】:Delete a member of a class in destructor which is made by new in a method in C++删除析构函数中类的成员,该成员由 C++ 中的方法中的 new 创建
【发布时间】:2017-02-10 20:02:30
【问题描述】:

我搜索了这个问题但我找不到它,如果它是一个重复的问题而不给出否定点,请告诉我答案的链接。

Student 类中,我有很多成员,但其中四个是由运算符 new 在名为 set 的 public 方法中创建的

我这里只写其中一个:

class Student{
   private:
     float *tp;
   ....
}

这里是 set 方法,它是 public

void Student::set(int field, int valeur){
    ...
            tp = new float[valeur];
    ...     
}

这里是 destructor,它是 public

    ~Student(){
        ...
        delete tp;
        ...
    }

主要

...
Student *students=new Student[n];
...
delete students;

在编译过程中没有任何错误,但是当我运行时却遇到了错误:

我还更改了 ma​​in 代码,只是为了检查:

    Student s;

错误仍然存​​在。

【问题讨论】:

  • 你没有贴出来的代码有错误
  • 请提供一个显示此问题的最小但完整的代码示例
  • 在您包含的内容中,您没有调用 set,因此 tp 可能有一个不确定的值,导致 delete tp 具有未定义的行为
  • 删除数组时也应该使用delete[]
  • vu1p3n0x 谢谢。

标签: class destructor new-operator member delete-operator


【解决方案1】:

Azvu1p3n0x 说:

如果我使用 new [],我应该使用 delete []。

谢谢vu1p3n0x

【讨论】:

  • 很高兴我能帮上忙:D
猜你喜欢
  • 1970-01-01
  • 2010-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-10
  • 1970-01-01
相关资源
最近更新 更多