Jak zaimplementować kompozycję klas w C ++?

Jeśli dobrze rozumiem, mamy co najmniej dwa różne sposoby wdrażania kompozycji. (Przypadek implementacji za pomocą inteligentnych wskaźników jest wykluczony ze względu na prostotę. Prawie nie używam STL i nie chcę się tego uczyć.)

Spójrzmy na Wikipedięprzykład:

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

Więc to jest jeden sposób - mamywskaźnik do obiektu jako członek prywatny. Można przepisać go tak, aby wyglądało tak:

class Car
{
  private:
    Carburetor itsCarb;
};

W takim przypadku mamyobiekt sam jako członek prywatny. (Swoją drogą, czy mam prawo nazwać ten obiekt obiektem z terminologicznego punktu widzenia?)

W drugim przypadku nie jest obowiązkowe niejawne wywołanie konstruktora domyślnego (jeśli trzeba wywołać konstruktor inny niż domyślny, można to zrobić na liście inicjatorów) i destruktora. Ale to nie jest duży problem ...

Oczywiście w niektórych aspektach te dwa przypadki różnią się znacznie bardziej. Na przykład zabronione jest wywoływanie niestałych metod instancji Carburetor ze stałych metod klasy Car w drugim przypadku ...

Czy są jakieś „zasady” decydujące o tym, którego z nich użyć? Czy czegoś mi brakuje?

questionAnswers(5)

yourAnswerToTheQuestion