“*&”是什么意思?在C ++中

时间:2013-03-29 08:29:50

标签: c++

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

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

时传播

感谢每个人的答案。

2 个答案:

答案 0 :(得分:6)

  

我知道*用于指针,&是引用。

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

答案 1 :(得分:2)

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