Virtual Function - Virtual Destructors

Virtual Destructors

Object-oriented languages typically manage memory allocation and deallocation automatically when objects are created and destroyed. However, some object-oriented languages allow a custom destructor method to be implemented, if desired. If the language in question uses automatic memory management, the custom destructor (generally called a finalizer in this context) that is called is certain to be the appropriate one for the object in question. For example, if an object of type Wolf that inherits Animal is created, and both have custom destructors, the one called will be the one declared in Wolf.

In manual memory management contexts, the situation can be more complex, particularly as relates to static dispatch. If an object of type Wolf is created but pointed to by an Animal pointer, and it is this Animal pointer type that is deleted, the destructor called may actually be the one defined for Animal and not the one for Wolf, unless the destructor is virtual. This is particularly the case with C++, where the behavior is a common source of programming errors.

While it might seem as though non-virtual destructor behavior is never the right thing, in very memory- or CPU-constricted environments where the overhead of polymorphism is not desired, and where objects are never deleted polymorphically, avoiding the construction of a virtual function table may be considered a worthwhile optimization.

Read more about this topic:  Virtual Function

Famous quotes containing the word virtual:

    Neither dead nor alive, the hostage is suspended by an incalculable outcome. It is not his destiny that awaits for him, nor his own death, but anonymous chance, which can only seem to him something absolutely arbitrary.... He is in a state of radical emergency, of virtual extermination.
    Jean Baudrillard (b. 1929)