class A{
public:
virtual ~A()=0;
};
class B:public A{
int *i;
public:
~B() {delete i;}
};
int main(){
B* temp = new B;
}
我只是想让B成为A的实现。出于某种原因,我不能这样做。
答案 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;
}