Copy Constructors 14.4 Copy Constructors

Copy Constructors 14.4 Copy Constructors

Ch 14.4: Copy Constructors 14.4 Copy Constructors ! Special constructor used when a newly created object is initialized using another object of the same class. CS 2308 Time t1; Spring 2019 Time t2 (t1); Both of the last two Time t3 = t1; use the copy constructor Jill Seaman ! The default copy constructor (provided by the c++ compiler) copies values of member variables to corresponding member variables. ! Default copy constructor works fine in most !1 cases !2 IntCell declaration IntCell Implementation ! Problem: what if the object contains a pointer? #include “IntCell.h” IntCell::IntCell (int initialValue) { class IntCell ptrToValue = new int; { *ptrToValue = initialValue; private: } int *ptrToValue; //ptr to int IntCell::~IntCell() { public: delete ptrToValue; IntCell (int initialValue); } ~IntCell(); int read () const; int IntCell::read () const { void write (int x); return *ptrToValue; }; } void IntCell::write (int x) { *ptrToValue = x; } !3 !4 Problem with member to member Problem with member to member copying copying ! What we get from member to member copying in ! Why are they both changed to 13? objects containing dynamic memory (ptrs): ! Member-wise copying does a shallow copy. It IntCell object1(5); copies the pointer’s address instead of allocating IntCell object2 = object1; // calls copy constructor new memory and copying the value. //object2.ptrToValue=object1.ptrToValue ! As a result, both objects point to the same object2.write(13); location in memory cout << object1.read() << endl; cout << object2.read() << endl; 13 object1 object2 What is output? 5 13 13 or 13 ptrToValue ptrToValue !5 !6 Programmer-Defined Programmer-Defined Copy Constructor Copy Constructor ! Prototype and definition of copy constructor: ! Each object now points to separate dynamic memory: IntCell(IntCell &obj); Add to class declaration IntCell object1(5); IntCell object2 = object1; //now calls MY copy constr IntCell::IntCell(IntCell &obj) { ptrToValue = new int; object2.write(13); *ptrToValue = obj.read(); cout << object1.read() << endl; Output: 5 } cout << object2.read() << endl; 13 5 13 ! Copy constructor takes a reference parameter to object1 object2 an object of the class (see text for the reason). ptrToValue ptrToValue ! If the class does dynamic memory allocation, it needs to define its own copy constructor !7 !8 (All linked list implementations).

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    2 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us