次のコードに疑問があります。機能fun1
とfun2
はどちらも同じです。1 つはローカル変数を宣言し、もう 1 つは引数によって変数を渡します。次に、fun1 の場合、コピー コンストラクターが呼び出されないのはなぜですか。
#include<stdio.h>
#include<iostream>
using namespace std;
class A
{
public:
A()
{
printf("constructor\n");
}
A(const A&)
{
printf("copy cons\n");
}
~A()
{
printf("destructor\n");
}
};
A fun1()
{
A obj;
return obj;
}
A fun2(A obj)
{
return obj;
}
int main()
{
A a=fun1();
printf("after fun1\n");
A b;
A c = fun2(b);
}
出力
constructor
after fun1
constructor
copy cons
copy cons
destructor
destructor
destructor
destructor