用于指向固定大小数组的指针的析构函数

Elp*_*rto 1 c++ debugging pointers destructor

假设我有一个带有两个私有变量的C++类.固定大小的数组,data以及指向该数组的指针pnt.

class MyClass
{
   private:
      double *pnt;
      double data[2];
   public:
      myClass();
      virtual ~MyClass();
      double* getPnt() const;
      void setPnt(double* input);
};

MyClass::MyClass()
{

   double * input;
   data[0] = 1;
   data[1] = 2;

   input= data;
   setPnt(input);
}

MyClass::~MyClass()
{
 delete this->pnt; // This throws a runtime error
}


void MyClass::setPnt(double * input)
{
   pnt = input;
}

double * MyClass::getPnt() const;
{
   return pnt;
}

int main()
{
   MyClass spam; // Construct object
   delete spam; // Error C2440: 'delete' cannot convert from 'MyClass' to 'void*'
}
Run Code Online (Sandbox Code Playgroud)

这段代码有两个问题.首先,如果我尝试在对象上调用delete,我得到:

错误C2440:'delete'无法从'MyClass'转换为'void*'

其次,如果我注释掉删除语句,我会得到一个实时错误,说明调试断言失败了!还有这个:

Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
Run Code Online (Sandbox Code Playgroud)

我的问题是:对于一个指向私有固定大小数组的类,如何正确释放内存,编写/调用析构函数?

PS我不能使用vector或像这样的好容器(因此这个问题).

seh*_*ehe 5

我看不到静态数组.我看到一个固定大小的数组.内存也data被分配为对象的一部分.

您不能明确删除该类的成员:删除操作符将处理该实例动态分配的IFF.

 {
      MyClass x; // auto variable
 } // x destructor run, no delete operator
Run Code Online (Sandbox Code Playgroud)

 {
      MyClass* x = new MyClass(); // heap allocation variable
      delete x; // x destructor run, ::delete de-allocates from heap
 } 
Run Code Online (Sandbox Code Playgroud)

  • @Elpezmuerto:没错.你不想"删除"指针,因为你没有用`new`分配它.`delete`语句*的目标必须是你用`new`分配的东西.唯一的例外:指针为空. (2认同)