std::enable_shared_from_this class is a (template) mixin, recommended for use to enable creating shared pointers from a given object (or its address), which all have common ownership of the object.
The thing is, that if you have an class T which:
std::enable_shared_from_this<T>(and the inheritance must be public as detailed at the link above; otherwise the mixin is useless)
-Wnon-virtual-dtor(perhaps also with clang, I’m not sure)
you get warnings about the non-virtual destructor of
My question is – where is the fault here? That is…
std::enable_shared_from_thishave a virtual destructor? (I don’t think so)
std::enable_shared_from_thisbe made protected? (And will this even work?)
There is no fault; your code is fine. It's merely a false-positive. The point of a warning is to detect pieces of code which, although valid C++, usually indicate problems. But "usually" does not mean "always", so most warnings have cases of false-positives, where it thinks there is misuse when there actually is not.
std::enable_shared_from_thishave a virtual destructor?
No code is expected to delete a pointer to
enable_shared_from_this. So no.
Should the non-virtual-destructor warning employ some criterion for when it is emitted (if at all enabled, that is)?
It's not reasonable for a compiler to know everything about what you're intending to do. It's just seeing something that's usually a problem, which you've decided to have it flag. In this case, it's not a problem.
Should the destructor of
std::enable_shared_from_thisbe made protected?
Should classes with this mixin not have virtual methods at all?
Answered by Nicol Bolas on November 15, 2021
4 Asked on July 25, 2020 by mohsin-ahmed
0 Asked on July 24, 2020 by jack-x
1 Asked on July 24, 2020 by sonu-ishaq
1 Asked on July 24, 2020 by bjorn
3 Asked on July 23, 2020 by themuyu
1 Asked on July 23, 2020 by jacobp
1 Asked on July 22, 2020 by tim496
2 Asked on July 22, 2020 by mmj
4 Asked on July 22, 2020 by doubledouble
Get help from others!