When designing a class, you should remember that one day it may serve as a base class for other classes. When deriving a class from a base, the base’s destructor and constructor(s) are implicitly copied into the derived class constructor(s) and destructor, respectively. As opposed to ordinary member functions, which can be overridden (provided they are virtual) or simply not called, base’s constructor(s) and destructor are automatically invoked. So it’s a good idea not to force derived objects to pay for what they don’t want, but are forced to use. In other words, constructors and destructors should contain the minimal functionality needed to construct an object and destroy it, but nothing more. For instance, a string class that supports serialization (writing its contents to a file) should not open/create a file in its constructor. This should be left to a dedicated member function, so when a new derived class, such as ShortString (used to hold fixed length strings, such as file names), is created, its constructor will not be forced to perform any superfluous file I/O which was inherited from the base class.
Looking for the best in software development? Our list of Top Software Development Companies is your gateway to finding the right tech partner. Dive in