MISRA.DTOR.DYNAMICObject's dynamic type is used from the body of its destructor. MISRA-C++ Rule 12-1-1 (required): An object"™s dynamic type shall not be used from the body of its constructor or destructor.This rule is also covered by MISRA.CTOR.DYNAMIC. [Undefined 10.4(6)] RationaleDuring construction and destruction of an object, its final type may be different to that of the completely constructed object. The result of using an object"™s dynamic type in a constructor or destructor may not be consistent with developer expectations. The dynamic type of an object is used in the following constructs:
This rule also prohibits a call being made to a pure virtual function from within a constructor or destructor. Such calls lead to undefined behaviour. Exampleclass B1 { public: B1 ( ) { typeid ( B1 ); // Compliant, B1 not polymorphic } }; class B2 { public: virtual ~B2 ( ); virtual void foo ( ); B2 ( ) { typeid ( B2 ); // Non-compliant B2::foo ( ); // Compliant — not a virtual call foo ( ); // Non-compliant dynamic_cast< B2* > ( this ); // Non-compliant } }; |