Copy Constructor vs Assignment Operator in C++ (original) (raw)

Last Updated : 23 Jul, 2025

Copy constructor and Assignment operator are similar as they are both used to initialize one object using another object. But, there are some basic differences between them:

Copy constructor Assignment operator
It is called when a new object is created from an existing object, as a copy of the existing object This operator is called when an already initialized object is assigned a new value from another existing object.
It creates a separate memory block for the new object. It does not automatically create a separate memory block or new memory space. However, if the class involves dynamic memory management, the assignment operator must first release the existing memory on the left-hand side and then allocate new memory as needed to copy the data from the right-hand side.
It is an overloaded constructor. It is a bitwise operator.
C++ compiler implicitly provides a copy constructor, if no copy constructor is defined in the class. A bitwise copy gets created, if the Assignment operator is not overloaded.
****Syntax:**className(const className &obj) {// body } **Syntax: className obj1, obj2;obj2 = obj1;

Consider the following C++ program.

CPP `

// CPP Program to demonstrate the use of copy constructor // and assignment operator #include #include <stdio.h> using namespace std;

class Test { public: Test() {} Test(const Test& t) { cout << "Copy constructor called " << endl; }

Test& operator=(const Test& t)
{
    cout << "Assignment operator called " << endl;
    return *this;
}

};

// Driver code int main() { Test t1, t2; t2 = t1; Test t3 = t1; getchar(); return 0; }

`

Output

Assignment operator called Copy constructor called

**Explanation: Here, **t2 = t1; calls the **assignment operator, same as **t2.operator=(t1); and **Test t3 = t1; calls the **copy constructor, same as **Test t3(t1);

**Must Read: When is a Copy Constructor Called in C++?