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