Boost logo

Boost :

From: Emil Dotchevski (emildotchevski_at_[hidden])
Date: 2019-10-15 20:45:16


On Tue, Oct 15, 2019 at 2:43 AM Alexander Grund via Boost <
boost_at_[hidden]> wrote:

>
> Am 15.10.19 um 11:14 schrieb Andrey Semashev via Boost:
> > On 2019-10-15 12:06, Alexander Grund via Boost wrote:
> >> Then it looks like the warning is indeed correct:
> >>
> https://github.com/boostorg/throw_exception/blob/e2e802e5085e10db7d5ee5ded4c80f663591e976/include/boost/exception/exception.hpp#L168
> >>
> >>
> >> `error_info_container` has a non-virtual dtor although it does have
> >> other virtual methods and the derived class has a `delete this` but
> >> is not final. Hence the compiler can't be sure that there isn't
> >> another derived class.
> >>
> >> Any reason to NOT make the dtor virtual? Performance degrade can be
> >> resolved by making the derived class final (where supported which
> >> should be almost everywhere nowadays)
> >
> > The warning is bogus because the object is never destroyed through the
> > base class. Marking the destructor virtual would suggest that that is
> > possible. And add a virtual call where none is needed.
> The warning is actually correct as one *could* have a class derived
> from`error_info_container_impl` which would then be deleted through a
> pointer to `error_info_container_impl` only.
>

The warning is not correct, and making the destructor virtual is wrong,
because by design it is a bug to delete the base pointer type. I just
disabled the warning for MSVC.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk