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

If I enclose my classes to anonymous namespace:

Procesing function int main()/172
  Targets of polymorphic call of type 0:struct Base token 2
    Contained in type:struct Base at offset 0
    This is a complete list. (derived types included)
       virtual {anonymous}::Base::~Base()/164 virtual 
{anonymous}::Derived::~Derived()/183

More than one likely target


My question is how can one help compiler if he knows that a class hierarchy is 
complete and there's no destructor except the virtual for base class?

Thank you,
Martin

Reply via email to