3

我坚持使用我的析构函数我的简短代码结构是这样的

class test
{
   private:
     string code;
     int digit, num_digit;  

   //destructor
   ~test() 
   {
      if(digit >= 0 && digit > num_digit)
      {
         for(unsigned int i=0; i<code.length(); i++) delete &code[i];
      }
   }
};

 <more code> .............
 <more code> .............

 int main()
 {
      Test test1
      test1.~test();
 }

在通过析构函数部分时,我的核心被中止。Unix 编译器说 Aborted - 'core dumped' 有什么想法吗?

4

2 回答 2

7

发生中止是因为正在尝试对delete未动态分配的对象进行尝试:delete通过new(和delete[]for new[])创建的对象。该code成员不是动态分配的。当包含的对象被销毁时,它将自动销毁。在Test没有理由手动编写析构函数的情况下。

这是不正确的:

test1.~test();

不要显式调用对象的析构函数。test1超出范围时将自动调用析构函数。delete对于动态分配的对象,析构函数将在它为d时被调用。

于 2013-04-26T08:35:41.327 回答
3

您只能删除通过调用 new 创建的指针。

您正在删除指向堆栈上的字符串的指针。这为您提供了核心转储。

于 2013-04-26T08:38:28.093 回答