It’s not a good practice.
A constructor that has no arguments.
A constructor that accepts one argument of a different type.
A copy constructor constructs a new object by using the content of the argument object. An overloaded assignment operator assigns the contents of an existing object to another existing object of the same class.
There are three acceptable answers: "Never," "Rarely," and "When the problem domain cannot be accurately modeled any other way."