2013-05-18 115 views
0

你好,我想創建一個新的類變量,它是一個指針,並通過複製構造函數初始化它。雖然我知道複製構造函數如何通過引用工作,但我無法弄清楚如何去做。你可以幫我嗎? 例如,我有這樣的定義:指針C++複製構造函數

class A{ 
public: 
int a; 
private: 
}; 

而在另一個代碼段我這樣做:

A *object= new A; 
A->a=10; 

A *newobject= new A(*object); 

,但我得到一個分段錯誤。你可以幫我嗎? 我也試過:

A *newobject= new A(&(*object)); 

,但它也不起作用。

+0

請提交完整的樣本。 Foo vs A? A.a vs object-> a? –

+2

[** Works fine **](http://ideone.com/uy1hAk)如果你刪除了明顯的錯誤。重要的問題是爲什麼你要這樣做呢? –

+0

爲了使隊列使用STL完全動態 – JmRag

回答

1

用這種簡單的例子,下面使用默認的比特明確拷貝構造函數工作正常。

簡單的類看起來像

class Bclass { 
public: 
    int iValue; 
}; 

和代碼使用拷貝構造函數的樣子:

Bclass *pObject = new Bclass; 
pObject->iValue = 10; 

Bclass *pObject2 = new Bclass (*pObject); 

使用Microsoft Visual Studio 2005中,上述工作正常。請參閱Implementing a Copy Constructor。請參閱Copy constructor for pointers to objects

2

在你的榜樣,這些線路甚至不應該編譯:

A *object= new A; 
A.a=10; 

您的意思是

Foo *object = new Foo; 
object->a = 10; 

,對嗎?

編輯補充:

會發生什麼事,當你通過@Alok保存嘗試the code posted

+0

是的,我寫在急!問題在於此! – JmRag

+0

它工作正常!非常感謝您的幫助! – JmRag

0

由於類名是Foo而不是A,所以應該創建一個Foo對象。

class Foo{ 
    public: 
    int a; 
    private: 
}; 

Foo *object= new Foo; 
object->a=10; 

現在因爲object是指向Foo類的指針,所以應該使用 - >運算符。