我正在查看ACE框架的手册并且遇到了这个声明
int ACE_Stream<>::get (ACE_Message_Block *& mb, ACE_Time_Value * timeout = 0)
我无法理解*&
代表什么。我知道*是指针和&amp;是参考。任何人都可以解释这个声明的含义。
提前致谢
因为@NPE说*&amp;使指针的更改传播回来。但要理解我只是写下了一些共享它的代码,以便它可以帮助其他人正确理解
#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
所以,如果我在函数内创建一个新实例,它只会在我使用*&
而不仅仅是*
感谢每个人的答案。
答案 0 :(得分:6)
我知道
*
用于指针,&
是引用。
正确。所以你在这里有一个指针,通过引用传递。
答案 1 :(得分:2)
mb
是一个通过引用传递的指针。这意味着如果get()
要更改指针的值,则更改将传播回调用方。