【发布时间】:2011-10-14 23:10:33
【问题描述】:
可能的重复:
Under what circumstances is it advantageous to give an implementation of a pure virtual function?
Why do we need a pure virtual destructor in C++?
当Base 具有纯virtual 析构函数时,编译器不会强制Child class 实现析构函数。
struct Base
{
virtual void foo () = 0;
virtual ~Base() = 0;
};
Base::~Base() {} // necessary
struct Child : Base
{
void foo() {}
//ok! no destructor needed to create objects of 'Child'
};
有趣的是;编译器宁愿强制Base 定义析构函数体。 Which is understood。 (Demo供参考)
那么在Base 类中拥有纯virtual 析构函数 的目的是什么? (只是为了禁止Base创建对象吗?)
【问题讨论】:
-
Child有一个默认构造函数。 -
@Luc,我的问题中已经提到了这个答案。想知道有没有其他目的
-
@iammilind:对不起,但我不完全理解这个问题。拥有虚拟析构函数有明显的目标(例如,正确的删除)。我们希望将此属性传递给后代,并在 Base 中声明虚拟 dtor。但是,我们在这个~Base() 中没有任何事情要做。为什么我们需要提供任何类型的虚拟 dtor 的身体?所以拥有纯虚拟 dtor 似乎很自然。或者问题是关于“在 Child 中没有明确的 dtor 的情况下它如何工作?”)?还是我错过了什么?
标签: c++ destructor language-lawyer pure-virtual