我相信我曾多次搜索过虚拟析构函数,大多数都提到了虚拟析构函数的用途,以及为什么需要虚拟析构函数。而且,我认为在大多数情况下,析构函数需要是虚拟的。
那么问题是:为什么c++在默认情况下不设置所有析构函数?或在其他问题上:
我什么时候不需要使用虚拟析构函数?
在这种情况下,我不应该使用虚拟析构函数?
如果我不需要使用虚拟析构函数,那么使用它的成本是多少?
发布于 2015-05-21 06:48:05
在这种情况下,我不应该使用虚拟析构函数?
顺便说一下,
在哪种情况下应该使用虚拟析构函数?
对于具有多态删除的基类。
发布于 2015-05-21 06:35:40
为什么c++不默认设置所有析构函数为虚拟?额外存储和调用虚拟方法表的成本。C++用于系统、低延迟、rt编程,这可能是负担.
发布于 2015-05-21 06:56:15
这是一个很好的示例,说明何时不使用虚拟析构函数:来自Scott:
如果一个类不包含任何虚拟函数,这通常表明它不打算用作基类。当类不打算用作基类时,使析构函数变为虚拟通常是个坏主意。根据ARM中的讨论,考虑这个例子:
// class for representing 2D points
class Point {
public:
Point(short int xCoord, short int yCoord);
~Point();
private:
short int x, y;
};如果短时int占用16位,则Point对象可以放入32位寄存器中.此外,Point对象可以作为32位数量传递给用C或FORTRAN等其他语言编写的函数。但是,如果Point的析构函数是虚拟的,则情况会发生变化。
当您添加虚拟成员时,将向您的类添加一个虚拟指针,指向该类的虚拟表。
https://softwareengineering.stackexchange.com/questions/284561
复制相似问题