What is a non-trivial destructor in C++?

前端 未结 3 1591
情深已故
情深已故 2021-01-01 20:10

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

相关标签:
3条回答
  • 2021-01-01 20:45

    I think in general it refers to a destructor that actually does something such as:

    • Release memory
    • Close a connection to database
    • Or take care of any resource that needs to be released

    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.

    0 讨论(0)
  • 2021-01-01 21:01

    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.

    0 讨论(0)
  • 2021-01-01 21:02

    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.

    0 讨论(0)
提交回复
热议问题