1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
#include <iostream>

class X {
   public:
      X() { std::cout << "X constructed" << std::endl; }
      ~X() { std::cout << "X destructed" << std::endl; }
};

class Y {
      X x;
   public:
      Y() { std::cout << "Y constructed" << std::endl; }
      ~Y() { std::cout << "Y destructed" << std::endl; }
};

class Z {
      Y y;
   public:
      Z() { std::cout << "Z constructed" << std::endl; }
      ~Z() { std::cout << "Z destructed" << std::endl; }
};

int main() {
   X x; Y y; Z z;
}