如何使用具有非指针属性的析构函数

时间:2013-04-26 08:34:06

标签: c++ exception-handling

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

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' 有什么好主意吗?

2 个答案:

答案 0 :(得分:7)

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

这是不正确的:

Test

不要显式调用对象的析构函数。当test1.~test(); 超出范围时,将自动调用析构函数。对于动态分配的对象,析构函数将在test1 d。

时调用

答案 1 :(得分:3)

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

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