I was reading this which mentions destructors being trivial and non-trivial.
A class has a non-trivial destructor if it either has an explicitly def
I think in general it refers to a destructor that actually does something such as:
In this case the destructor does nothing. According to the description, technically it may be 'non-trivial' because it defines a constructor, but it matters not, since it does nothing anyway.
You are getting your words mixed up. Your example does indeed declare an explicit destructor. You just forget to define it, too, so you'll get a linker error.
The rule is very straight-forward: Does your class have an explicit destructor? If yes, you're non-trivial. If no, check each non-static member object; if any of them are non-trivial, then you're non-trivial.
So you mean, the entire declaration of C
is this:
class C { };
?
Then, yes: Since C
has no member objects and no base classes, it therefore has no member objects with non-trivial destructors and no base classes with non-trivial destructors, so its implicitly-defined destructor is a trivial one.