Por que o construtor de cópia é chamado quando retornamos um objeto de um método por valor

Por que o construtor de cópia é chamado quando retornamos um objeto de um método por valor. Por favor, veja o meu código abaixo em que eu estou retornando um objeto de um método enquanto o controle de retorno está atingindo o construtor de cópia e, em seguida, retornando. Eu não sou entendido seguindo as coisas:
1) porque ele está chamando construtor de cópia.
2) qual objeto está passando implicitamente para copiar o construtor,
3) para o qual o construtor de cópia de objeto copiará o conteúdo,
4) qual é a necessidade de copiar o conteúdo do objeto durante o retorno. então plz ajuda.

#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;

class ClassA
{
   int a, b;
     public:
   ClassA()
   {
     a = 10;
     b = 20;
   }
   ClassA(ClassA &obj)
   {
    cout << "copy constructor called" << endl;
   }
 };

 ClassA function (ClassA &str)
 {
  return str;
 }

 int main ()
 {
   ClassA str;
   function(str);
   //function(str);
   return 0;
 }

questionAnswers(4)

yourAnswerToTheQuestion