...
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.
...