Factory Method: Motivation
In, C++ destructors are also an exception.
In C++ a destructor is an operation that is automatically invoked to finalize an object that is about to be deleted.
Destructors must have the same name as the name of the class prefixed with a tilde (~).
Thus clients must know the name of the destructor as well.
Most of the time, you will just use the default destructor so this is not an issue.
If it is an issue for your code, it is not hard to convert the Factory Method or Abstract Factory pattern to work with
destructors as well as constructors.
In fact you can use one of these Factory patterns for the destructors, while still using another pattern like Builder
or Prototype for the creation process. In practice, you only rarely need to do this.
The factory method pattern is an object-oriented creational design pattern to implement the concept of factories and
deals with the problem of creating objects without specifying the exact class of object that will be created.
The essence of this pattern is to define an interface for creating an object and allow the classes that implement the interface decide which class to instantiate.
The Factory method lets a class defer instantiation to subclasses.
Creating an object often requires complex processes not appropriate to include within a composing object.
The object's creation may lead to a significant duplication of code and may require information not accessible to the composing object.
This may not provide a sufficient level of abstraction or may otherwise not be part of the composing object's concerns.
The factory method design pattern handles these problems by defining a separate method for creating the objects,
which subclasses can then override to specify the derived type of product that will be created.