可能重复:
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 的实现。出于某种原因,我不能这样做。
可能重复:
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 的实现。出于某种原因,我不能这样做。
在 C++ 中,析构函数可以是纯虚拟的:
class A{
public:
virtual ~A()=0;
};
但在每种情况下都需要实施:
inline A::~A() {}
否则 A 不是可用的类。我的意思是不可能破坏派生的(S/B)。在这一行中需要破坏的可能性:
B* temp = new B;
因为在抛出异常的情况下 - 编译器将自动破坏 temp...
根据你的评论"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;
}