纯虚拟析构函数的目的是什么
What is the purpose of pure virtual destructor?
可能的重复:
在什么情况下给出纯虚拟函数的实现是有利的
为什么我们需要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
定义析构函数体。这是可以理解的。(演示供参考(
那么在Base
类中拥有纯virtual
析构函数的目的是什么?(这只是为了禁止Base
创建对象吗?(
有时抽象基类没有虚拟方法(=通常称为"mixin"(或根本没有方法 要强制将这些类用作抽象基类,至少需要有一个方法是纯虚拟的,但类没有虚拟方法!因此,我们将析构函数改为纯虚拟的。
它使类变得抽象。至少存在一个纯虚拟方法就足以使类抽象。
如果Base
中没有任何其他纯虚拟函数,则可以选择将析构函数设置为纯虚拟函数以使基类仍然是抽象的。
实际上,确实强制派生类实现析构函数,但如果不提供,编译器会帮你实现。
好吧,也许我可以用更好的措辞。第二段答复:
当
Base
具有纯virtual
析构函数时,编译器不会强制Child class
实现析构函数。
我可能想说,虚拟析构函数(纯的或非纯的(会导致派生类也有一个虚拟析构因子,无论你是写它还是编译器写它。
当其Base具有纯虚拟析构函数。
不,编译器会为Child类生成一个默认的析构函数(它反过来调用基类的纯虚拟析构函数的实现(,以防您没有显式定义它。
相关文章:
- C++:使用方法调用析构函数的顺序是什么?
- 在析构函数中删除单链表的正确方法是什么?
- 应该是虚拟析构函数吗?但是怎么做呢?
- 什么是带有友元说明符的析构函数
- 这是删除析构函数中的数组的正确方法吗?
- 在C++中为临时库调用析构函数的顺序是什么
- 虚拟析构函数的用途是什么
- Qt:写这个类的析构函数的正确和安全的方法是什么
- 在C++中,析构函数的调用顺序和成员变量的销毁顺序是什么
- C++11 中默认虚拟析构函数的异常规范是什么?
- 调用析构函数以释放C++运算符中的内存的正确方法是什么
- 这个枚举在析构函数中的用途是什么
- 为这个二进制节点类创建析构函数的正确方法是什么
- 我的析构函数需要在这个函数中是什么
- 当您有一个二维数组(C++)时调用析构函数的正确方法是什么?
- 传递到虚拟析构函数的这个额外参数是什么?
- 关于隐式删除虚析构函数的错误信息是什么?
- 变量或对象的内存在程序结束时自动终止,而不是使用析构函数
- 为什么是虚析构函数
- gcov报告的析构函数中的分支是什么?