2015-03-13 92 views
0

我是一種新的C++類,我需要製作一個使用指向對象的指針的複製構造函數。 我的類看起來是這樣的:複製指針對象的構造函數

class test 
{ 
    int a; 
    char *b; 
public: 
    test() 
    { 
     a=0; 
     b="\0"; 
    } 
    test(const test &p) 
    { 
     b=new char(strlen(p.b)+1); 
     b=p.b; 
     a=p.a; 
     cout<<"The copy constructor works"; 
    } 
    void seta(int nr) 
    { 
     a=nr; 
    } 
    void setb(char *s) 
    { 
     b=s; 
    } 
    int geta() 
    { 
     return a; 
    } 
    char *getb() 
    { 
     return b; 
    } 
}; 

現在我有一個指向對象

test *x; 
x=new test; 

我需要做的是創建另一個指向對象,* Y,將具有相同值作爲x,使用複製構造函數。如果它們是對象而不是指針,那麼這個拷貝構造函數會起作用。你能告訴我該怎麼辦嗎?謝謝!

+0

語義pedantry:複製構造*按定義*不採取指針。你在說什麼更正確地稱爲轉換構造函數。 – 2015-03-13 18:29:43

回答

2

你應該做的可能不是使用指針。

如果你真的想這樣做,你可以用一個拷貝構造函數正是如此結合new

test *y = new test(*x); 

您還需要修復您的拷貝構造函數來複制字符串,而不是指針的內容:

strcpy(b, p.b); // not b = p.b; 

和修復默認的構造函數,因此不指向一個字符串(這將無法編譯在一個現代的編譯器,並會去可怕的錯誤,如果你曾經嘗試添加一個析構函數來解決內存泄漏)。

如果您是C++的新手,那麼在面對指針和內存分配失靈之前,使用基本類型和像std::string這樣的友好庫類型可能會更有趣。

0

簡單,只需取消x當您將它傳遞給構造函數test時。

test* y = new test(*x);