我有一个函数A(),该函数返回一个指向对象的指针。在函数B()中,我尝试通过以下方式更改该对象的成员:

void B()
{
    ObjType o = *getObj();
    o.set("abc");
}

对象o被存储在一个数组中,当我打印该成员的值时,似乎什么也没发生,并且该成员仍然具有旧值;

解决方案非常简单:
void B()
{
    ObjType * o = getObj();
    o->set("abc");
}

这确实有效。但是对我来说,这与第一个示例完全相同。谁能解释一下?

最佳答案

以下行最有可能复制对象:

ObjType o = *getObj();

这就是为什么什么也没发生。如果您不想使用第二个片段中所示的指针,则可以使用如下引用:
ObjType& o = *getObj();
o.set("abc");

08-16 00:51