1

可能重复:
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 的实现。出于某种原因,我不能这样做。

4

2 回答 2

3

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

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

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

inline A::~A() {} 

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

  B* temp = new B;

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

于 2012-11-04T02:39:30.303 回答
1

根据你的评论"Yeah i want A to basically be just a container class. Do not want any implementation of A"。您的 B 类应从protected/privateA 继承而不是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;
} 
于 2012-11-04T02:49:09.947 回答