私はACEフレームワークのマニュアルを見ていましたが、この宣言に出くわしました
int ACE_Stream<>::get (ACE_Message_Block *& mb, ACE_Time_Value * timeout = 0)
何を*&
表しているのか理解できません。* はポインター用で、& は参照用です。この宣言の意味を説明できる人はいますか。
前もって感謝します
したがって、@NPEが言ったように、 *& はポインターへの変更を反映させます。しかし、理解するために、他の人がこれを正しく理解するのに役立つように、それを共有するコードを書き留めました
#include <iostream>
using namespace std;
class DoSomething
{
public:
int n;
DoSomething(int i){
n = i;
}
virtual ~DoSomething();
};
DoSomething::~DoSomething()
{
}
int dosomething(DoSomething * a)
{
cout << "Got value from caller: (in dosomething) = " << a << endl;
a = new DoSomething(25);
return 0;
}
int dosomethingElse(DoSomething *& a)
{
cout << "Got value from caller: (in dosomethingElse) = " << a << endl;
a = new DoSomething(15);
return 0;
}
int main(int argc, char *argv[])
{
DoSomething *d = new DoSomething(10);
cout << "Pointer to DoSomething: " << d << endl;
dosomething(d);
cout << "After dosomething value of d: " << d << endl << endl;
dosomethingElse(d);
cout << "After dosomethingElse value of d: " << d << endl << endl;
delete d;
return 0;
}
@NPEが言ったように、ここはこれのアウトプットです
Pointer to DoSomething: 0x955f008
Got value from caller: (in dosomething) = 0x955f008
After dosomething value of d: 0x955f008
Got value from caller: (in dosomethingElse) = 0x955f008
After dosomethingElse value of d: 0x955f028
したがって、実際に関数内に新しいインスタンスを作成すると、それは使用する場合にのみ伝播されます*&
。*
回答ありがとうございます。