0% found this document useful (0 votes)
135 views2 pages

C++ SPL Paper On Copy Constructors

A copy constructor is called when a new variable is initialized from an existing object, such as when declaring a new variable initialized with an existing object, when passing an object as a value parameter to a function, or when returning an object from a function. The copy constructor makes a "deep copy" of the object, copying the values of all its fields and any dynamically allocated memory. If a class does not define its own copy constructor, the compiler provides a default copy constructor that performs a "shallow copy", copying only the field values. If a class needs a copy constructor because it manages dynamically allocated memory, it will also need to define its own destructor and assignment operator. The copy constructor takes a reference to a const parameter

Uploaded by

Sanjay Munjal
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
135 views2 pages

C++ SPL Paper On Copy Constructors

A copy constructor is called when a new variable is initialized from an existing object, such as when declaring a new variable initialized with an existing object, when passing an object as a value parameter to a function, or when returning an object from a function. The copy constructor makes a "deep copy" of the object, copying the values of all its fields and any dynamically allocated memory. If a class does not define its own copy constructor, the compiler provides a default copy constructor that performs a "shallow copy", copying only the field values. If a class needs a copy constructor because it manages dynamically allocated memory, it will also need to define its own destructor and assignment operator. The copy constructor takes a reference to a const parameter

Uploaded by

Sanjay Munjal
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 2

8/28/2014 C++ Notes: Copy Constructors

http://www.fredosaurus.com/notes-cpp/oop-condestructors/copyconstructors.html 1/2
C++ Notes: OOP: Copy Constructors
When copies of objects are made
A copy constructor is called whenever a new variable is created from an object. This happens in the following
cases (but not in assignment).
A variable is declared which is initialized from another object, eg,
Person q("Mickey"); // constructor is used to build q.
Person r(p); // copy constructor is used to build r.
Person p = q; // copy constructor is used to initialize in declaration.
p = q; // Assignment operator, no constructor or copy constructor.
A value parameter is initialized from its corresponding argument.
f(p); // copy constructor initializes formal value parameter.
An object is returned by a function.
C++ calls a copy constructor to make a copy of an object in each of the above cases. If there is no copy
constructor defined for the class, C++ uses the default copy constructor which copies each field, ie, makes a
shallow copy.
Don't write a copy constructor if shallow copies are ok
If the object has no pointers to dynamically allocated memory, a shallow copy is probably sufficient. Therefore
the default copy constructor, default assignment operator, and default destructor are ok and you don't need to
write your own.
If you need a copy constructor, you also need a destructor and operator=
If you need a copy constructor, it's because you need something like a deep copy, or some other management
of resources. Thus is is almost certain that you will need a destructor and override the assignment operator.
Copy constructor syntax
The copy constructor takes a reference to a const parameter. It is const to guarantee that the copy constructor
doesn't change it, and it is a reference because a value parameter would require making a copy, which would
invoke the copy constructor, which would make a copy of its parameter, which would invoke the copy
constructor, which ...
Here is an example of a copy constructor for the Point class, which doesn't really need one because the default
copy constructor's action of copying fields would work fine, but it shows how it works.
//=== file Point.h =============================================
class Point {
public:
. . .
Point(const Point& p); // copy constructor
. . .
//=== file Point.cpp ==========================================
. . .
Point::Point(const Point& p) {
x = p.x;
y = p.y;
}
. . .
//=== file my_program.cpp ====================================
. . .
Point p; // calls default constructor
Point s = p; // calls copy constructor.
p = s; // assignment, not copy constructor.
8/28/2014 C++ Notes: Copy Constructors
http://www.fredosaurus.com/notes-cpp/oop-condestructors/copyconstructors.html 2/2
Difference between copy constructor and assignment
A copy constructor is used to initialize a newly declared variable from an existing variable. This makes a deep
copy like assignment, but it is somewhat simpler:
1. There is no need to test to see if it is being initialized from itself.
2. There is no need to clean up (eg, delete) an existing value (there is none).
3. A reference to itself is not returned.
Unaddressed issue
[Question: When is the base (parent) class copy constructor called? Is it like Java and the parent constructor is
called at the beginning of each constructor? Does it have to be explicit?]
Copyleft 2004 Fred Swartz MIT License

You might also like