以下のコードでf1を呼び出すと、コンストラクタが呼び出されるはずですか? "this"ポインタがオブジェクトb(paramからf1)で違っているのは、新しいオブジェクトが作成されたことを意味しますが、bのコンストラクタでは印刷されません。 しかし、デストラクタへの呼び出しがあります、誰も説明することができますか?オブジェクトを関数に渡してもコンストラクタ呼び出しが発生しない
class A
{
int k ;
public:
A(int i)
{
k=i;
printf("%d inside [%s]ptr[%p]\n",k,__FUNCTION__,this);
}
~A()
{
printf("%d inside [%s]ptr[%p]\n",k,__FUNCTION__,this);
}
void A_fn()
{
printf("%d inside [%s]ptr[%p]\n",k,__FUNCTION__,this);
}
};
void f1(A b)
{
b.A_fn();
}
int _tmain(int argc, _TCHAR* argv[])
{
A a(10);
f1(a);
return 0;
}
VC++ 2012に示す出力:
10 inside [A::A]ptr[00B3FBD0]
10 inside [A::A_fn]ptr[00B3FAEC]
10 inside [A::~A]ptr[00B3FAEC]
10 inside [A::~A]ptr[00B3FBD0]
Press any key to continue . . .
はコピーコンストラクタでコメントを追加するには、チェック... – Nipun