は、私が必見に新しいAの感謝を生成する、のがメインコードでAとB新ポインタを参照にキャストしなければならない、私は2つのクラスを持っている
class A:
{
public:
//Some functions
A *getNewA() const;
private:
//some attributes
}
class B:
{
public:
//Some functions
private:
A &reftoA;
}
それらを呼びましょうA :: getNewA()メソッド。
A *A::getNewA()
{
A *newA = new A;
return newA;
}
OK:そして、このはクラスBここで
に書かれたように、B :: reftoAにA :: getNewA()メソッドがされて行かなければなりません。だから今、私はこれがあったはずと思った(パラメータとしての参照を取る)B機能
B::foo(A ¶mA)
{
reftoA = *(paramA.getNewA());
}
ではA.へ参照である、getNewAを呼び出し、reftoAに結果を保存したいですしかし、それはしません。 逆参照の場合、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とポインタについて何かを誤解していますが、私はないと思う
何を知っている。
すべてのヘルプは非常にはい、あなたが何かを誤解している
待ちを使用することができますへの参照を再割り当てしたい場合は? 'return A'?それはどのように構築されますか?あなたに私たちを見せるために、[最小、完全で、かつ証明可能な例](http://stackoverflow.com/help/mcve)を作成してみてください。 –
また、メモリリークがあります。あなたは 'getNewA'によって返されたポインタを破棄します(実際には' newA'を返すと仮定します)。 –
最後に、あなたの問題の原因となる可能性のあるもの:*参照を再割当てすることはできません。あなたがやっているのは、*オブジェクト*に*を割り当てることです。あなたは効果的に 'reftoA.operator =(*(paramA。' –