...
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 if the definition of Body
defines or inherits a member operator delete
.
...