2017-06-02 89 views
0

當我在下面的代碼中調用f1時,是否應該調用構造函數? 我看到「this」指針在對象b(參數爲f1)中是不同的,這意味着創建了一個新對象,但是我沒有看到b的構造函數中的打印。 但是有調用析構函數,任何人都可以解釋嗎?在VC 2012所示將對象傳遞給函數不會導致構造函數調用

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

輸出:

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"); 
}