First, this writing concentrates of and compares between three programming languages, C#, C++/CLI, and ISO/ANSI C++. It discusses 9 rules that every developer should keep in mind while working with constructors, destructors, and finalizers and class hierarchies:
* Rule #1: Contrsuctors are called in descending order
* Rule #2: In C# lexicology, a destructor and a finalizer refer to the same thing
* Rule #3: Destructors are called in ascending order
* Rule #4: Finalizers are a feature of GC-managed objects only
* Rule #5: You cannot determine when finalizers would be called
* Rule #6: MC++ differs between destructors and finalizers
* Rule #7: In MC++ and classic C++, you can determine when destructors are called
* Rule #8: In MC++, destructors and finalizers are not called together
* Rule #9: Beware of virtual functions in constructors
Rule #1: Constructors are called in descending order
Rule #1: Constructors are called in descending order; starting from the root class and stepping down through the tree to reach the last leaf object that you need to instantiate. Applies to C#, MC++, and ANSI C++.
Let's consider a simple class hierarchy like this:
class BaseClass
{
{
class DerivedClass : BaseClass
{
{
class ChildClass : DerivedClass
{
{
ChildClass inherits from DerivedClass, and DerivedClass, in turn, inherits from BaseClass.
Read more: C# Corner