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.
Your company probably relies on audio more than you realize. Whether you’re creating a spoken text message to a colleague or giving a speech, you want your audio to shine. Otherwise, you could cause avoidable friction points and potentially hurt your brand reputation. For example, let’s say you create a