#include class X { private: const char* name; public: X(const char* name) : name(name) { std::cout << "X \"" << name << "\" constructed" << std::endl; } ~X() { std::cout << "X \"" << name << "\" destructed" << std::endl; } }; class Y { public: Y(const char* name) : x("within Y"), name(name) { std::cout << "Y \"" << name << "\" constructed" << std::endl; } ~Y() { std::cout << "Y \"" << name << "\" destructed" << std::endl; } private: X x; const char* name; }; X x = "global x"; int main() { X x1 = "local x1"; Y* yp = new Y{"*yp (on heap)"}; X x2 = "local x2"; delete yp; }