Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

When is a Copy Constructor Called in C++?

  • Difficulty Level : Easy
  • Last Updated : 29 Nov, 2021

A copy constructor is a member function that initializes an object using another object of the same class. The Copy constructor is called mainly when a new object is created from an existing object, as a copy of the existing object. 

In C++, a Copy Constructor may be called for the following cases: 

Want to learn from the best curated videos and practice problems, check out the C++ Foundation Course for Basic to Advanced C++ and C++ STL Course for foundation plus STL.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

1) When an object of the class is returned by value. 
2) When an object of the class is passed (to a function) by value as an argument. 
3) When an object is constructed based on another object of the same class. 
4) When the compiler generates a temporary object. 

Example:



C++




// CPP Program to demonstrate the use of copy constructor
#include <iostream>
#include <stdio.h>
using namespace std;
  
class storeVal {
public:
    // Constructor
    storeVal() {}
    // Copy Constructor
    storeVal(const storeVal& s)
    {
        cout << "Copy constructor has been called " << endl;
    }
};
  
// Driver code
int main()
{
    storeVal obj1;
    storeVal obj2 = obj1;
    getchar();
    return 0;
}
Output
Copy constructor has been called 

It is, however, not guaranteed that a copy constructor will be called in all these cases, because the C++ Standard allows the compiler to optimize the copy away in certain cases, one example being the Return Value Optimization (sometimes referred to as RVO). 

Note: C++ compiler implicitly provides a copy constructor, if no copy constructor is defined in the class.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

My Personal Notes arrow_drop_up
Recommended Articles
Page :