Operator Overloading

Question Text

How many constructor calls, copy constructor calls, assignment operator calls and destructor calls does the following program issue?

Obj quiz(Obj o1, Obj o2)
{
    o2 = o1;
    return o2;
}
void main()
{
    Obj b = quiz(o1, o2);
}

Question Answers

  • constructor calls = 0, copy constructor calls = 3, assignment operator calls = 1, destructor calls = 3

  • constructor calls = 1, copy constructor calls = 2, assignment operator calls = 1, destructor calls = 2

  • constructor calls = 0, copy constructor calls = 2, assignment operator calls = 1, destructor calls = 2

  • constructor calls = 0, copy constructor calls = 3, assignment operator calls = 1, destructor calls = 1

Feedback

  • There are no constructor calls because there is no object construction when using int.
  • There are 3 copy constructor calls: for passing o1, for passing o2, and for returning o2.
  • There is 1 assignment operator call for o2 = o1.
  • There are 3 destructor calls, because each constructed object needs to be destroyed.