Copy Constructor in C++ - BunksAllowed

BunksAllowed is an effort to facilitate Self Learning process through the provision of quality tutorials.

Random Posts

Copy Constructor in C++

Share This

One of the more important forms of an overloaded constructor is the copy constructor. Defining a copy constructor can help you prevent problems that might occur when one object is used to initialize another.


Let's begin by restating the problem that the copy constructor is designed to solve. By default, when one object is used to initialize another, C++ performs a bitwise copy. That is, an identical copy of the initializing object is created in the target object. Although this is perfectly adequate for many cases - and generally exactly what you want to happen - there are situations in which a bitwise copy should not be used.


One of the most common is when an object allocates memory when it is created. For example, assume a class called MyClass that allocates memory for each object when it is created, and an object A of that class. This means that A has already allocated its memory. Further, assume that A is used to initialize B, as shown here:


MyClass B = A;



#include <iostream> #include <new> #include <cstdlib> using namespace std; class array { int *p; int size; public: array(int sz) { try { p = new int[sz]; } catch (bad_alloc xa) { cout << "Allocation Failure\n"; exit(EXIT_FAILURE); } size = sz; } ~array() { delete [] p; } array(const array &a); void put(int i, int j) { if(i>=0 && i<size) p[i] = j; } int get(int i) { return p[i]; } }; array::array(const array &a) { int i; try { p = new int[a.size]; } catch (bad_alloc xa) { cout << "Allocation Failure\n"; exit(EXIT_FAILURE); } for(i=0; i<a.size; i++) p[i] = a.p[i]; } int main() { array num(10); int i; for(i=0; i<10; i++) num.put(i, i); for(i=9; i>=0; i--) cout << num.get(i); cout << "\n"; // create another array and initialize with num array x(num); // invokes copy constructor for(i=0; i<10; i++) cout << x.get(i); return 0; }


Happy Exploring!

No comments:

Post a Comment