2011-03-24 106 views
1

我的一個C++任務有問題。它更多的是一個理論問題。下面是代碼:查找類拷貝構造的問題

//a class implementation 
class IntArrays { 
public: 
    IntArrays(int n): data(new int[n]), size(n) { } 
    ~IntArrays() { delete[] data; }; 
    const int& operator[](int n) const 
     { return data[n]; } 

    IntArrays(const IntArrays& ar): 
     data(new int[ar.size]), 
     size(ar.size) { 
     std::copy(data, data + size, ar.data); 
    } 

private: 
    int* data; 
    int size; 
}; 

//a driver 
int main() 
{ 
    IntArrays a(100); 
    IntArrays b = a; // Problem! 
     return 0; 
} 

In 1-2 sentences, explain why the second line of the driver program is problematic. 

我真的不知道是司機的第二行有什麼錯誤,因爲當我運行它的罰款。起初我以爲是因爲=運算符沒有超載,但IntArrays b = a是使用複製構造函數,所以不是它。我完全困惑,請幫助。如果我沒有得到答案,這將非常困擾我。

在此先感謝。

+0

確實來自源這個問題,你一定是準確可靠?是否有人可能會錯誤地認爲'IntArrays b = a;'會使用'operator ='? – aschepler 2011-03-24 00:31:06

+0

這是一個分配問題,我直接從word文件中複製它。我之前搜索了一下,它使用IntArrays的複製構造函數b = a;但它從頭開始創建。 – Pete42 2011-03-24 00:36:47

回答

4

您正在複製錯誤的方式。

std::copy(data, data + size, ar.data); 

應該是:

std::copy(ar.data, ar.data + size, data); 
+0

謝謝,我不知道這是否意味着什麼是錯誤的第二行,因爲技術上說,這不是在第二行,但它是第二行使用什麼。 – Pete42 2011-03-24 00:37:44

+0

@ Pete42:儘管如此,它準確地模擬了現實生活 - 在程序中首次觀察問題的線很少是包含錯誤的線。或者,也許只是因爲如果問題是「std :: copy行中的錯誤是什麼」,它使得這項任務變得非常容易...... – 2011-03-24 00:59:26

+0

我完全同意你,非常感謝你。我們從來沒有真正在類中創建自定義拷貝構造函數,所以我對它不熟悉。 – Pete42 2011-03-24 05:05:42