2012-07-31 113 views
2

可以說我有如何將結構的地址分配給另一個結構?

struct someStruct 
{ 
    int a; 
}; 

和2班。

在第一類中的方法創建結構的一個實例:

someStruct structName; 

現在我想這個結構的地址傳遞給另一個類

std::auto_ptr<2ndClass> 2ndClass_ (new 2ndClass(structName)); 

我想要的構造使用2ndClass中更改的結構值 - 閱讀下面...

第二類有:

標題:

... 
class 2ndClass... 
... 
private: 
someStruct &structName2; 
public: 
__fastcall 2ndClass(someStruct &structName); 
... 

CPP:

__fastcall 2ndClass::2ndClass(someStruct &structName) 
    : structName2(structName) 
{ 
... 

這顯然使得structName的副本。

我的問題是:如何能我一個地址從structName分配給structName2,所以我可以讀取和寫入的結構,然後離開第二級後的第一類使用這些值?我怎樣才能做到這一點,而不使用指向結構的指針?

+0

爲什麼你不想使用指針? – 2012-07-31 17:37:28

回答

4

這obvoiusly使得structName的副本。

不,它不需要。你通過引用傳遞,你的成員是一個引用,所以2ndClass::structName2將引用你傳遞給構造函數的參數的確切對象。

問題是如何從structName指定地址給structName2,這樣我就可以讀取和寫入結構,然後在離開第二個類後在第一個類中使用這些值。

你並不需要,因爲你引用的工作。在函數簽名中,&代表引用,而不是地址。所以你不會傳遞地址,而是傳遞對象本身。

注意如果原來的結構超出範圍,你會有一個懸而未決的參考,所以一定要處理這種情況。如果內存不被覆蓋,它可能會工作,但它是未定義的行爲。

+0

呃,我工作太多了,是的,它正在工作,但我測試了它錯誤... – user1566456 2012-07-31 17:42:52

+0

@ user1566456注意,如果原始結構超出範圍,您將有一個懸而未決的參考,所以一定要處理這種情況。如果內存沒有被覆蓋,它可能*出現*工作,但它是未定義的行爲。 – 2012-07-31 17:46:09

相關問題