0

我正在查看 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

所以确实,如果我在函数内部创建一个新实例,它只会在我使用时传播*&,而不仅仅是*

谢谢大家的回答。

4

2 回答 2

6

我知道*是指针,&是参考。

正确的。所以你这里有一个指针,通过引用传递。

于 2013-03-29T08:31:54.010 回答
2

mb是一个通过引用传递的指针。这意味着如果get()要更改指针的值,更改将传播回调用者。

于 2013-03-29T08:30:29.410 回答