Copy Constructor vs Assignment Operator in C++
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 create a separate memory block or new memory space. |
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 <iostream> #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++?