After the new release of C++ and the inclusion of boost's pointer, many original concepts of C++ had been overwritten. When I studied C++ back in the '90s, the orthodox canonical class formation was important to make a UDT behave as closely as possible to a built-in type. The orthodox canonical class must be having a default constructor, a virtual destructor, a copy constructor, and an assignment operator. These four building blocks must be there in a class before we can call it a canonical C++ class.
Here I have developed an Orthodox canonical String class in its simplest form.
I hope you will like the video of creating it.