Boost logo

Boost :

Subject: Re: [boost] [C++11] If you have an old class with a throwing destructor...
From: Eric Niebler (eniebler_at_[hidden])
Date: 2013-09-16 16:47:13


On 9/16/2013 2:20 AM, Nathan Ridge wrote:
>> On 13-09-09 02:57 PM, Niall Douglas wrote:
>>> On 9 Sep 2013 at 13:11, Nevin Liber wrote:
>>>
>>>>> In C++03 it was always best practice to *always* wrap your
>>>>> destructors in a try...catch clause.
>>>>
>>>> No; the best practice is not to throw from a destructor.
>>>
>>> Sorry, my unclear phrasing again ... by wrapping destructors I
>>> specifically meant:
>>>
>>> destructor::~destructor()
>>> { try {
>>> ...
>>> } catch(...) { /* do something useful */ } }
>>
>> Can you elaborate on what "something useful" is in this context?
>
> Log the error, perhaps?

Sure. And then? Don't say, "Quietly swallow the exception." Something
Very Bad has happened. Ignoring it inevitably leads to Something Worse
(like data corruption, security vulnerabilities, etc). The only sensible
option is to terminate, which is why the language semantics are what
they are. The OP's suggestion to litter destructors with try/catch is
misguided. That's no way to build reliable systems.

-- 
Eric Niebler
Boost.org
http://www.boost.org

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