Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
TheDestructor
and theAssignment
Operator
Robb T.Koether
TheDestructor
The thisPointer
TheAssignmentOperator
Assignment
The Destructor and the AssignmentOperatorLecture 7
Section 6.3
Robb T. Koether
Hampden-Sydney College
Fri, Jan 30, 2009
TheDestructor
and theAssignment
Operator
Robb T.Koether
TheDestructor
The thisPointer
TheAssignmentOperator
Assignment
Outline
1 The Destructor
2 The this Pointer
3 The Assignment Operator
4 Assignment
TheDestructor
and theAssignment
Operator
Robb T.Koether
TheDestructor
The thisPointer
TheAssignmentOperator
Assignment
The Destructor
The DestructorType::~Type(); // Prototype;
The destructor destroys an object, i.e., it deallocatesthe memory used by the object.The destructor is not invoked explicitly.
TheDestructor
and theAssignment
Operator
Robb T.Koether
TheDestructor
The thisPointer
TheAssignmentOperator
Assignment
Purpose of the Destructor
The destructor is used to destroy an object when itpasses out of scope.A local variable passes out of scope when executionreturns from a function.A variable declared within a block {} passes out ofscope when execution leaves that block.A volatile object passes out of scope when theevaluation of the expression in which it occurs iscompleted.
TheDestructor
and theAssignment
Operator
Robb T.Koether
TheDestructor
The thisPointer
TheAssignmentOperator
Assignment
Purposes of the Default Constructor
The Destructorint main(){
Vectr v(5, 123);{
Vectr u = 5*v;}return 0;
}
How many vectors get destroyed and exactly when?
TheDestructor
and theAssignment
Operator
Robb T.Koether
TheDestructor
The thisPointer
TheAssignmentOperator
Assignment
The Automatic Destructor
The automatic destructorInvokes each data member’s destructor.Deallocates the memory used by the data members.
The automatic destructor does not deallocate memorythat the data members point to.
TheDestructor
and theAssignment
Operator
Robb T.Koether
TheDestructor
The thisPointer
TheAssignmentOperator
Assignment
The this Pointer
Every (non-static) member function has a hiddenparameter named this.this is always the first parameter in such a function.this is a constant pointer to the object (Type*const this) that invoked the member function.this provides us with a name for the invoking object.
TheDestructor
and theAssignment
Operator
Robb T.Koether
TheDestructor
The thisPointer
TheAssignmentOperator
Assignment
The this Pointer
When we write the prototype of a member function as
Apparent PrototypeType::func(params);
the actual prototype is
Actual PrototypeType::func(Type* const this, params);
this is a constant pointer to an object.
TheDestructor
and theAssignment
Operator
Robb T.Koether
TheDestructor
The thisPointer
TheAssignmentOperator
Assignment
The this Pointer
Furthermore, when we write the prototype of a memberfunction as
Apparent PrototypeType::func(params) const;
the actual prototype is
Actual PrototypeType::func(Type const* const this, params);
this is a constant pointer to a constant object.
TheDestructor
and theAssignment
Operator
Robb T.Koether
TheDestructor
The thisPointer
TheAssignmentOperator
Assignment
Usage of the this Pointer
Inside a member function, we refer to a data memberas member.This is interpreted as this->member.
TheDestructor
and theAssignment
Operator
Robb T.Koether
TheDestructor
The thisPointer
TheAssignmentOperator
Assignment
Usage of the this Pointer
Inside a member function, we invoke another memberfunction of the same class by writing func(params).This is interpreted as this->func(params).
TheDestructor
and theAssignment
Operator
Robb T.Koether
TheDestructor
The thisPointer
TheAssignmentOperator
Assignment
The Assignment Operator
The Assignment OperatorType& Type::operator=(const Type&); // ProtoObjectA = ObjectB; // Usage
The assignment operator assigns to an existing objectthe value of another existing object of the same type.The assignment operator must be a member function.
TheDestructor
and theAssignment
Operator
Robb T.Koether
TheDestructor
The thisPointer
TheAssignmentOperator
Assignment
Purpose of the Assignment Operator
The assignment operator is use to assign the value ofone object to another object in an assignmentstatement.
TheDestructor
and theAssignment
Operator
Robb T.Koether
TheDestructor
The thisPointer
TheAssignmentOperator
Assignment
Form of the Function operator=()
The Assignment OperatorType& Type::operator=(const Type& value){
if (this != &value){// Clear out the old value// Assign the new value}return *this;
}
TheDestructor
and theAssignment
Operator
Robb T.Koether
TheDestructor
The thisPointer
TheAssignmentOperator
Assignment
Form of the Function operator=()
The makeEmpty() and makeCopy() Functionsvoid makeEmpty();Clears out the old value of the object.void makeCopy(const Type& value);Assign the new value to the object.
It is convenient write these two member functions andthen use them in the copy constructor, the destructor,and the assignment operator.
TheDestructor
and theAssignment
Operator
Robb T.Koether
TheDestructor
The thisPointer
TheAssignmentOperator
Assignment
The Copy Constructor
The Copy ConstructorType::Type(const Type& value){
makeCopy(value);return;
}
TheDestructor
and theAssignment
Operator
Robb T.Koether
TheDestructor
The thisPointer
TheAssignmentOperator
Assignment
The Destructor
The DestructorType::~Type(){
makeEmpty();return;
}
TheDestructor
and theAssignment
Operator
Robb T.Koether
TheDestructor
The thisPointer
TheAssignmentOperator
Assignment
The Assignment Operator
The Assignment OperatorType& Type::operator=(const Type& value){
if (this != &value){
makeEmpty();makeCopy(value);
}return *this;
}
TheDestructor
and theAssignment
Operator
Robb T.Koether
TheDestructor
The thisPointer
TheAssignmentOperator
Assignment
The Automatic Assignment Operator
The automatic assignment operator uses each datamember’s assignment operator to assign values tothem from the other object.
TheDestructor
and theAssignment
Operator
Robb T.Koether
TheDestructor
The thisPointer
TheAssignmentOperator
Assignment
Multiple Assignments
The assignment operator is right-associative.The statement
a = b = c = d;
is equivalent toa = (b = (c = d));
TheDestructor
and theAssignment
Operator
Robb T.Koether
TheDestructor
The thisPointer
TheAssignmentOperator
Assignment
Multiple Assignments
What about the statements((a = b) = c) = d;
and(a = b) = (c = d);
TheDestructor
and theAssignment
Operator
Robb T.Koether
TheDestructor
The thisPointer
TheAssignmentOperator
Assignment
Example
Example (The Vectr Class)Download vectr.h.Download vectr.cpp.Download and run VectrTest.cpp.