Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Because impl_ is a pointer to an undefined class, its deletion in Handle's destructor results in undefined behavior if Body has a non-trivial destructor. Even in the case where Body does have a non-trivial destructor, this practice should be avoided. During maintenance a non-trivial destructor could be added to Body, resulting in undefined behavior in the destructor for Handle. Typical behavior in this case is that no destructor is called and the memory for Body is released via a call to the usual global operator delete. This may result in a resource leak or other bug if the destructor manages resources, or the definition of Body defines or inherits a member operator delete.

Compliant Solution 1

The deletion of impl_ should be moved to a part of the code where Body is defined.

...