2012-12-11 18 views
-2

我知道C++,所以如果有人能夠幫助我解決這些TorF問題,那就太好了。在C++代碼中複製構造函數,指針,真或假的問題

對或錯:使用C++時,只有在將值傳遞給函數輸入時,纔會使用類的複製構造函數。

對或錯:以下C++函數madeA()是一個有效的函數實現。

ClassA{ 
public: 
    int x; 
    char *y; 
}; 
void madeA(const A &t_a){ 
    t_a.x = 1; 
    t_a.y = 0; 
} 

True或False:以下C++代碼段是等效的。

void cmax(int a, int b, int *max){ 
    if(a>b) *ax = a; 
    *max = b; 
} 

using namespace std; 

void main(){ 
    int *max = new int; 
    cmax(20, 5, max); 
    cout<< *ax << endl; 
} 

下面的代碼:

void cmax(int a, int b, int &max){ 
    if(a>b) max = a; 
    max = b; 
} 

void(){ 
    int max; 
    cmax(20, 5, ax); 
    std::cout <<max<<std::endl; 
} 
+1

你能告訴我們你的想法和原因嗎? – chris

+0

第一次:不知道「傳遞價值意味着什麼」,所以不能回答。 第二:在編譯器中運行它,並且告訴我madA函數中的「const」是錯誤的。 3rd:沒有看到指針使用以外的區別。 只是想更好地解釋所有這些以更好地理解答案。 – ddwong

回答

1

第一:假
複製構造函數可能在需要副本時隨時調用。
簡單示例:按值返回

第二種:錯誤
您正在修改參考const參數的內容。它不應該編譯,即使你使用一些指針hackery它會導致未定義的行爲

第三:假
第一次有內存泄漏第二次沒有。
第二個代碼片段甚至不會編譯。

+0

從技術上講,我不會稱之爲內存泄漏。它只是一個正在分配的整數,在程序結束後立即清理。如果它在一個循環中,那麼是的,我會說它是。 – chris

+0

我剛剛得到第三個問題的第二個代碼來編譯。謝謝你的答案。不明白爲什麼,但現在我做。 – ddwong

+0

也答案表說,第一個是真的 – ddwong