C ++程序错误 - 虚拟析构函数

时间:2012-11-04 02:35:52

标签: c++ inheritance destructor pure-virtual

  

可能重复:
  Pure virtual destructor in C++

class A{
    public:
        virtual ~A()=0;
};

class B:public A{
        int *i;
    public:
        ~B() {delete i;}
};

int main(){
    B* temp = new B;
}

我只是想让B成为A的实现。出于某种原因,我不能这样做。

2 个答案:

答案 0 :(得分:3)

在C ++中,析构函数可以是纯虚拟的:

class A{
    public:
        virtual ~A()=0;
};

但在每种情况下都需要实施:

inline A::~A() {} 

否则A不是可用的类。我的意思是衍生(S / B)的破坏是不可能的。在这一行中需要破坏的可能性:

  B* temp = new B;

因为在抛出异常的情况下 - 编译器会自动破坏temp ...

答案 1 :(得分:1)

根据您的评论"Yeah i want A to basically be just a container class. Do not want any implementation of A"。 您的B类protected/private将继承自A而不是public继承。 允许virtual ~A()pure,但您仍需要向~A()提供实施。

class A{
public:
  virtual ~A() = 0
  {
    cout << "~A"<<endl;
  }
};

class B : private /*protected*/ A{
  int *i;
public:
  B() : A(){
    i = new int;
  }
  ~B() {
    delete i;
  }
};

int main(){
    B* temp = new B;
    delete temp;
    return 0;
}