To ensure that a plug-in does not cause instability in the 3ds Max, the following rules must be followed for all objects that may be shared from a plug-in with 3ds Max.
Virtually every class and struct in the 3ds Max SDK has MaxHeapOperators as a base class, so inheriting from any of these classes assures that you have MaxHeapOperators as a base class. Although this can create a diamond-shaped inheritance pattern for types with multiple base classes, MaxHeapOperators uses only static member functions; name-resolution ambiguities should not occur.
These rules are important because objects shared with 3ds Max have to be allocated on a single shared heap managed by 3ds Max. For more information on what problem MaxHeapOperators is trying to solve see MSDN.