我有兩個班,我們姑且稱之爲A和B類方法的新指針必須被鑄造成一個參考
class A:
{
public:
//Some functions
A *getNewA() const;
private:
//some attributes
}
class B:
{
public:
//Some functions
private:
A &reftoA;
}
在主代碼,我必須產生一個新的A感謝A :: getNewA()方法。這必須去B :: reftoA,寫在B級
這裏是A :: getNewA()方法:
A *A::getNewA()
{
A *newA = new A;
return newA;
}
確定。所以,現在我打電話getNewA和要存儲reftoA的結果,這是一個參考到A在B的功能(這需要參照A作爲參數)
B::foo(A ¶mA)
{
reftoA = *(paramA.getNewA());
}
我想這應該是工作,但它不會。 因爲當解引用時,reftoA將總是接受這個對象而不是新分配的對象。
讓我們更加清晰,讓我們修改函數輸出結果
A * A::getNewA()
{
A *newA = new A;
std::cout << "New pointer " << newA << std::endl;
std::cout << "this pointer" << this << std::endl;
return A;
}
void B::foo(A ¶mA)
{
reftoA = *(paramA.getNewA());
std::cout << "new generated pointer " << &reftoA << std::endl;
}
這裏是一個輸出:
New pointer : 004FFAEC
this pointer: 0069D888
New generated pointer : 0069D888 //Expected : 004FFAEC
我不能讓這個「新產生的指針」是與A :: getNewA()在分配內存之後返回的新指針相同。當然,我想有一點與解引用指針將其存儲在引用中有一定的意義。 我知道引用與現有的對象一起使用。也許新的對象A :: getNewA()應該分配內存不會像我期望的那樣工作。
我可以使用指針B中代替參考:: foo的(),我知道,但我不能
我想我誤解的東西約refrence和指針,但我不知道什麼。
任何幫助,不勝感激
等等,什麼? '返回A'?這是如何構建的?你能否請嘗試創建一個[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)向我們展示? –
另外,你有內存泄漏。你放棄'getNewA'返回的指針(當然,假設你實際返回'newA'),所以你真的沒有什麼可以「刪除」的。 –
最後,您的問題的可能來源:*您不能重新分配參考*。你正在做的是將*分配給*對象*。你真的在做'reftoA.operator =(*(paramA。getNewA()))' –