Download presentation
Presentation is loading. Please wait.
1
The Assignment Operator
2
Rule of Three Any object which manages memory needs: Custom Destructor
Custom Copy Constructor Custom Assignment Operator
3
Copy Constructor Generally need a deep copy not a shallow one: YES NO
4
Copy Constructor Recipee
Basic copy constructor recipe:
5
Using Copy Ctor Explicitly
Explicit copy constructor call:
6
Using Copy Ctor Implicitly
Initialization while declaring uses copy constructor:
7
Using Assignment Operator
Assign existing object uses assignment operator
8
Default Assignment Operator
Every class gets default assignment operator Copies each member directly: Shallow copy!!!
9
Custom Assignment Operator
Custom assignment operator similar to copy constructor Copy over basic information Allocate own dynamic memory Copy values that are in dynamic memory
10
Custom Assignment Operator
Custom assignment operator similar to copy constructor Copy over basic information Allocate own dynamic memory Copy values that are in dynamic memory Differences: Usually returns a reference to the object Already have an object… which already owns memory
11
Custom Assignment Operator
Course assignment operator: I will return a reference to the course that we are copying into I take a reference to a course we will not change Interpreted as course2.=(course1)
12
Why return reference Chained assignments are allowed in C++
Only makes sense if y = 2 resolves to y when done
13
Why return reference Chained assignments are allowed in C++ y
Only makes sense if y = 2 resolves to y when done y
14
Assignment First Pass…
On assignment: Two existing objects Want to turn one into deep copy of other course2 = course1 course2.=(other) course2 is this course1 is other
15
Flawed first attempt… Copy basic stuff
16
Flawed first attempt… Delete old storage
17
Flawed first attempt… Allocate new storage
18
Flawed first attempt… Copy data
19
Flawed first attempt… Return the object that was copied into
20
Self Assignment Danger
Flaw : self assignment deletes data
21
Bad Self Assignment Copying basic info does nothing
22
Bad Self Assignment Deleting wipes out storage!!!
23
Bad Self Assignment Allocate a new empty array
24
Bad Self Assignment Loop either copies empty data or blows up array up
25
Final Version Avoid modifying on self assignment:
If address of other is same as this (my address), don't copy
26
Recipe Basic recipe: Step Pseudocode Verify not self assigning
Copy basics Delete old memory Make new array Copy array No matter what, return self if( this != &other) { this.size = other.size … delete [] array array = new whatever[other.size] for(i = 0 to other.size -1) array[i] = other.array[i] } return *this
27
Rule of 3 If you manage memory you need: Custom Destructor
Custom Copy Constructor Custom Assignment Operator
28
Rule of 5 If you manage memory you need: You may want to provide:
Custom Destructor Custom Copy Constructor Custom Assignment Operator You may want to provide: Move assignment operator Move copy constructor
29
Move semantics C++ allows us to specify that data should be moved from one place to another:
30
Moving Copy:
31
Moving Copy:
32
Moving Copy:
33
Moving Move:
34
Moving Move:
35
Moving Move:
36
Defining && = Rvalue reference
Move constructor/assignment take rvalue reference: Move constructor:
37
Defining && = Rvalue reference
Move constructor/assignment take rvalue reference: Move assignment:
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.