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 {};

-- 
Markus

Reply via email to