Re: A few questions about singletons...
* Chris M. Thomasson:
"Michael Doubez" <michael.doubez@free.fr> wrote in message
news:c96a9e29-4305-446d-8d88-55693fc8f99c@v36g2000yqv.googlegroups.com...
On 30 sep, 01:48, "Chris M. Thomasson" <n...@spam.invalid> wrote:
[snip]
if (! m_mutex)
{
assert(m_mutex);
std::unexpected();
}
[snip]
I wondered about this usage of assert() + unexpected(): what is the
rational of using both ?
I made several *mistakes in the "hard" error handling code. Sorry about
that.
To tell the truth, I never use std::unexpected(). How and when do you
use it ?
Quite frankly, I personally do not know which exception to throw as I am
not a C++ expert.
You can invoke std::terminate.
Or if you don't want a possible termination handler to execute, just abort().
I decorated the constructor/destructor and
`prv_get_name()' functions with the `throw()' clause. IMVHO, if the ctor
of a singleton fails, then end user program is in peril. Should the
singleton ctor throw or not?
Consider a singleton that represents a late-loaded (dynamically loaded) shared
library. In that case, if the library isn't present on the system then it might
be OK to continue with some fallback solution or reduced functionality. If that
singleton just aborts then it's rather difficult to continue...
But equally, there might be some singleton where the only sensible choice is to
abort no matter what, ensuring the same failure behavior in all cases (whether
the singleton is constructed from within a caller's code try-block or not).
So, I guess it's again Niels Bohr's statement, "The number of tails of a dog
depends on the dog".
Cheers,
- Alf