I understand you want to know the difference between using an initialization like
Base a = b;
and an assignement like
b = a;
Both will have the effect of transporting the object on the right side to the left side. BUT: When initializing an object it is not necessary to release any memory or other resources that the object might have acquired. Thus, the execution of the copy constructor is in general a little faster than an assignment.
In an assignment operation, all resources acquired by the object must first be released before the right hand object can be copied over. And that is what you forgot in the implementation of your assignment operation:
Base operator=(const Base& obj1)
{
m = new int(*obj1.m); }
You would have to change it to:
Base operator=(const Base& obj1)
{
delete m;
m = new int(*obj1.m); }
and that explains the major difference between initialization and assignment.