Jus*_*ang 0 c++ virtual-destructor
我一直在阅读Scott Meyers的Effective C++ 3rd Edition,在其中一章中他说任何具有虚函数的类几乎都应该有一个虚拟的析构函数.现在,对于我下面的代码,该函数someFunc在派生类中不需要虚拟.但是,我决定把它放在那里以显示语义和更好的可读性.因为我把虚拟放在那里,是否意味着派生类中的析构函数必须是虚拟的?
#include <iostream>
using namespace std;
class base
{
public:
base(){...}
virtual ~base(){...}
virtual someFunc() = 0;
};
class derived1:public base
{
public:
derived1(){...}
~derived1(){...} //Does this need to be virtual?
virtual someFunc(/*Implement the function*/); //I made this virtual just to show meaning
};
int main()
{
base* b;
b=new derived1;
delete b; //Will this cause a memory leak?
}
Run Code Online (Sandbox Code Playgroud)
它已经是!
该virtual关键字是隐式的为你的derived::someFunc,对你的derived::~derived,因为这两个功能碱当量被标记virtual.
因此,您可以virtual在两者上编写关键字,既不是也不只是一个.没关系:无论如何,它们都是虚拟的.