参考不归?

时间:2018-02-23 21:46:03

标签: c++ pass-by-reference

我的类有一个对象数组,称之为Foo。它在类中存储为Foo* m_Foos。假设它的值为[0],保证,而Foo有一个名为IsSet的属性,它只是一个布尔或其他东西。

void TryThis()
{
   Foo returnValue;
   GetValue(returnValue);
   returnValue.IsSet = true;
   if(m_Foo[0].IsSet != returnValue.IsSet)
   {
      // ERROR!!!!
   }
}

void GetValue(Foo &container)
{
   container = m_Foos[0];
}

任何人都可以解释为什么m_Foo [0] = / = returnValue?我的语法错误在哪里?

我希望m_Foo [0]与returnValue是相同的引用,内存中的Foo相同。

1 个答案:

答案 0 :(得分:5)

TryThis()未修改Foo数组中存储的m_Foos对象。

GetValue()正在将Foo对象从m_Foos[0]分配给Foo本地的另一个TryThis()对象。在该分配期间正在制作副本TryThis()然后修改副本,而不是原始副本。

如果您希望TryThis()直接修改原始Foo对象,则需要执行更类似的操作:

void TryThis()
{
   Foo &returnValue = GetValue();
   returnValue.IsSet = true;
   // m_Foo[0] is set true.
}

Foo& GetValue()
{
   return m_Foos[0];
}

或者这个:

void TryThis()
{
   Foo *returnValue;
   GetValue(returnValue);
   returnValue->IsSet = true;
   // m_Foo[0] is set true.
}

void GetValue(Foo* &container)
{
   container = &m_Foos[0];
}