Почему это когда g_Fun()
выполняет до return temp
это будет вызывать конструктор копирования?
class CExample
{
private:
int a;
public:
CExample(int b)
{
a = b;
}
CExample(const CExample& C)
{
a = C.a;
cout<<"copy"<<endl;
}
void Show ()
{
cout<<a<<endl;
}
};
CExample g_Fun()
{
CExample temp(0);
return temp;
}
int main()
{
g_Fun();
return 0;
}
Потому что вы возвращаете по значению, но обратите внимание, что вызов конструктора копирования не требуется, потому что РВО.
В зависимости от уровня оптимизации, copy-ctor может или не может быть вызван — не полагайтесь ни на что.
Конструктор копирования может вызываться всякий раз, когда мы возвращаем объект (не его ссылку), потому что необходимо создать его копию, что делается конструктором копирования по умолчанию.
CExample g_Fun()
{
return CExample(0); //to avoid the copy constructor call
}