[Interest] qobject_cast

Thiago Macieira thiago.macieira at intel.com
Thu Apr 20 18:53:34 CEST 2017


On quinta-feira, 20 de abril de 2017 09:35:15 PDT Igor Mironchik wrote:
> Hi,
> 
> >> QObject has virtual destructor... dynamic_cast will work. But it doesn't
> >> matter, the problem was in another...
> > 
> > If your class has virtual functions or derives from such base class, and
> > have inline (or default) virtual destructor,its  v-table will be emitted
> > in each translation unit. This is undesirable and can lead to subtle
> > problems. See e.g.
> > 
> > http://llvm.org/docs/CodingStandards.html#provide-a-virtual-method-anchor-> > for-classes-in-headers
> There said that it can lead just to increasing objects size in linking
> time. What problems may appear?

Emitting in multiple places is not usually a problem.

The problem happens when DLL/shared library boundaries appear. Depending on 
your compilation flags, the symbols will not be merged at runtime and ODR 
violations will occur.

I've said this before. A plugin system consists of:
 a) zero or more plugins
 b) zero or more applications
 c) exactly one DLL/shared library

-- 
Thiago Macieira - thiago.macieira (AT) intel.com
  Software Architect - Intel Open Source Technology Center




More information about the Interest mailing list