#include class X { public: X() : data(new int{0}) { std::cout << "X: default constructor" << std::endl; } X(int i) : data(new int{i}) { std::cout << "X: constructor with i = " << i << std::endl; } ~X() { std::cout << "X: destructor with *data = " << *data << std::endl; delete data; } private: int* data; }; int main() { X x1{42}; X x2 = x1; X x3; x3 = x1; }