我的类有一个对象数组,称之为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
相同。
答案 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];
}