Warum wird der Kopierkonstruktor aufgerufen, wenn wir ein Objekt von einer Methode als Wert zurückgeben?

Warum wird der Konstruktor copy aufgerufen, wenn wir ein Objekt von einer Methode als Wert zurückgeben? Bitte beachten Sie meinen folgenden Code, dass ich ein Objekt von einer Methode zurückgebe, während die Rückgabe des Steuerelements den Kopierkonstruktor trifft und dann zurückgibt. Ich verstehe folgende Dinge nicht:
1) warum es Kopierkonstruktor aufruft.
2) welches Objekt implizit an den Kopierkonstruktor übergeben wird,
3) in welchen Objektkopierkonstruktor der Inhalt kopiert wird,
4) Was ist die Notwendigkeit, den Objektinhalt bei der Rücksendung zu kopieren? Also bitte helfen.

#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;
 }

Antworten auf die Frage(4)

Ihre Antwort auf die Frage