¿Cómo implementar la composición de clase en C ++?

Si entiendo correctamente, tenemos al menos dos formas diferentes de implementar la composición. (El caso de implementación con punteros inteligentes se excluye por simplicidad. Casi no uso STL y no deseo aprenderlo).

Echemos un vistazo a Wikipediaejemplo:

class Car
{
  private:
    Carburetor* itsCarb;
  public:   
    Car() {itsCarb=new Carburetor();}
    virtual ~Car() {delete itsCarb;}
};

Entonces, es una manera - tenemos unapuntero a objeto como miembro privado. Uno puede reescribirlo para verse así:

class Car
{
  private:
    Carburetor itsCarb;
};

En ese caso tenemos unobjeto sí mismo como miembro privado. (Por cierto, ¿tengo derecho a llamar a esta entidad un objeto desde el punto de vista de la terminología?)

En el segundo caso, no es obligatorio llamar implícitamente al constructor predeterminado (si es necesario llamar al constructor no predeterminado, es posible hacerlo en la lista de inicializadores) y al destructor. Pero no es un gran problema ...

Y, por supuesto, en algunos aspectos estos dos casos difieren más apreciablemente. Por ejemplo, está prohibido llamar a los métodos no constantes de la instancia de Carburador desde los métodos const de la clase Car en el segundo caso ...

¿Hay alguna "regla" para decidir cuál usar? ¿Me estoy perdiendo de algo?

Respuestas a la pregunta(5)

Su respuesta a la pregunta