2017-06-02 14 views
0

以下のコードで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 . . . 
+2

はコピーコンストラクタでコメントを追加するには、チェック... – Nipun

答えて

2

あなたは値によってオブジェクトを渡す際、オブジェクトはにコピーされるため、コピーコンストラクタが呼び出されますので。

0

としては、すでに指摘し、あなたがこれはそれがどのように見えるべきかであるクラスAにコピーコンストラクタを追加する必要があります。

A(const A&) 
{ 
    printf("Inside copy constructor\n"); 
} 
関連する問題