If you want the copy constructor to be called, use
MyClass object2 (object1);
Other than that, the copy constructor is called implicitly when transfering arguments by value or returning by value. Hence, a function
MyClass myFunction (MyClass obj)
{
...
return x;
}
would implicitly call the copy constructor for argument obj and for returning value x. Notice, however, that by modifying the function to
MyClass& myFunction (MyClass& obj)
{
...
return x;
}
the copy constructor will not be called. In these cases a reference is passed, which means internally that just a pointer is being transferred in and out.