On 10/22/2014 05:30 PM, Markus Trippelsdorf wrote:
On 2014.10.22 at 17:15 +0200, Martin Liška wrote:
Hello.
I've been playing with following example:
#include <stdlib.h>
class Base
{
public:
virtual ~Base() {}
};
class Derived: public Base
{
};
#define N 1000
int main()
{
Base **b = (Base **)malloc (sizeof(Base *) * N);
for (unsigned i = 0; i < N; i++)
b[i] = new Derived();
for (unsigned i = 0; i < N; i++)
delete b[i];
return 0;
}
Where I would like to somehow give an advice to devirtualize
machinery. My motivation is to inline destruction in 'delete b[i]'.
'final' keyword does not solve my problem:
a.c:9:7: error: virtual function ‘virtual Derived::~Derived()’
class Derived: public Base
^
a.c:6:11: error: overriding final function ‘virtual Base::~Base()’
virtual ~Base() final {}
What about:
class Derived final: public Base {};
Yes, that works, but it allows one to have a different class that inherits from
the Base class.
Martin