解除引用操作符和函数的问题

Ikk*_*kke 3 c++ pointers

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

void B()
{
    ObjType o = *getObj();
    o.set("abc");
}
Run Code Online (Sandbox Code Playgroud)

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

解决方案非常简单:

void B()
{
    ObjType * o = getObj();
    o->set("abc");
}
Run Code Online (Sandbox Code Playgroud)

这确实有效.但对我来说,这与第一个样本完全相同.有谁能解释一下?

gix*_*gix 9

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

ObjType o = *getObj();
Run Code Online (Sandbox Code Playgroud)

这就是为什么没有发生的原因.如果您不想使用第二个代码段中所示的指针,则可以使用如下引用:

ObjType& o = *getObj();
o.set("abc");
Run Code Online (Sandbox Code Playgroud)