C ++错误:声明'~Destructor'作为'Class'的成员

时间:2013-09-15 01:45:03

标签: c++ g++

我使用g++ -Wall -Werror *.cpp进行编译并收到错误:

ConcreteCharArray.h:21:15: error: declaration of ‘~CharArray’ as member of ‘ConcreteCharArray’

具体实施:

class ConcreteCharArray: public CharArray
{
private:
    char * charArray;
public:
   ~CharArray() {
      delete[] string;
   }
};

虚拟课程:

class CharArray
{
public:
   virtual ~CharArray() {};
};  

1 个答案:

答案 0 :(得分:3)

在名为~CharArray的类中声明名为ConcreteCharArray的成员是非法的,这是编译器告诉您的。 ~的存在表明您正在声明析构函数,析构函数的名称必须与类的名称匹配。

析构函数是特殊成员函数。它们的一个特殊属性是,为了覆盖基类的虚析构函数,您不必在派生类中匹配该析构函数的名称(正如您通常使用普通成员函数那样)。编译器会自动将析构函数相互匹配,即使它们的名称不同。这很容易做到,因为每个类只有一个析构函数。

因此,如果要在类ConcreteCharArray中声明析构函数,则必须调用该析构函数~ConcreteCharArray。没有其他选择。即使派生的析构函数的名称与基本析构函数的名称不同,派生的析构函数也将被视为虚拟的,并将覆盖基础析构函数。