c++ - 指向固定大小数组的指针的析构函数

标签 c++ debugging pointers destructor

假设我有一个带有两个私有(private)变量的 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*'
}

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

Error C2440: 'delete' cannot convert from 'MyClass' to 'void*'

其次,如果我注释掉 delete 语句,我会收到一个实时错误,指出调试断言失败!还有这个:

Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)

然后我的问题是:对于具有指向私有(private)固定大小数组的指针的类,我如何正确释放内存、编写/调用析构函数?

P.S 我不能使用 vector 或类似的漂亮容器(因此出现这个问题)。

最佳答案

我没有看到静态数组。我看到一个固定大小的数组。 data 的内存也作为对象的一部分分配。

您不得显式删除类的成员:删除运算符将处理动态分配的IFF实例。

 {
      MyClass x; // auto variable
 } // x destructor run, no delete operator

对比

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

关于c++ - 指向固定大小数组的指针的析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7612574/

相关文章:

c++ - 在哪一行调用了复制构造函数?

c++ - 如何使用 std::vector 初始化 boost::random::discrete_distribution?

C++从main()通过类函数传递指针

c++ - strtok_s() 为什么我们需要指针的地址?

c++ - 可以将不同的 .dwo 文件合并为一个吗?

c++ - 将值从一个类传递到另一个类。单独的 cpp 文件。 C++

asp.net - 回发或回调参数无效。调试问题

javascript - Firebug 中的脚本编辑

java - 在两个调试 session 之间保留对象 ID

c++ - 跨子对象边界的指针算法