C ++返回对临时[duplicate]的引用
|
这个问题已经在这里有了答案:
没有找到相关结果
已邀请:
8 个回复
垫歌蝎降凤
问题是您返回的AnotherObject()将在函数退出后立即销毁,因此函数的调用者将引用虚假对象。 但是,如果您的函数按值返回:
然后在原件销毁之前先进行复印,您会没事的。
杰黔轿缺
创建一个对象,该对象在函数退出之前被破坏-临时对象在包含它们的表达式[*]的末尾被销毁,and3ѭ表达式创建一个临时对象。 由于该函数按引用返回,这意味着调用者甚至有机会看到该引用,因此不再引用有效对象。 如果该函数按值返回就可以了,因为临时变量将被复制[**]。 [*]有几种情况无法解决,但在这里却无济于事。 [**]实际上,有一个名为“复制构造函数删除”的优化,这意味着不需要创建,复制和销毁临时文件。取而代之的是,在某些情况下,允许编译器以与创建临时目标相同的方式来创建副本的目标,而完全不必理会临时目标。
豆兢
上创建一个临时值,并在销毁它之前立即返回它。您的函数的调用者将获得垃圾,因此被禁止。 也许您想在堆上分配它并返回指向它的指针?
或者,声明您的函数以将\“ copy \”返回到您的对象,而不是像我假设您现在正在返回的引用一样:
春驹晴陪
琶竞捆栓
田损比报
您也可以按值返回或返回指针,在这种情况下,可以返回NULL。
补蹲农界维
悸翠疮武昏