This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Devirtualize virtual call hierarchy if just base dtor exists


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]