#include 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; }