我有两个代码段,我期望得到相同的结果:
第一个:
SomeClass somefunc(...){
SomeClass newObj;
//some codes modify this object
return newObj;
}
int main(){
SomeClass *p;
p = &(somefuc(...));
}
第二个:
SomeClass *somefunc(...){
SomeClass newObj;
//some codes modify this object
return &newObj;
}
int main(){
SomeClass *p;
p = somefunc(...);
}
为什么我在尝试构建第一个代码段时遇到“获取临时对象的地址”错误,而第二个代码段没有产生错误?
答案 0 :(得分:0)
第一个示例没有编译,因为somefunc返回一个值,并且您尝试获取它返回的此临时事物的地址。这可行:
Someclass* p;
Someclass val = somefunc (...);
p = &val;
第二个例子不编译 - 或者不应该 - 因为somefunc应该返回Someclass,而是返回指向Someclass的指针。让它返回Someclass *然后它应该编译 - 但现在你返回一个指向局部变量的指针,在你离开函数后它不再存在。最好的解决方案是第一个例子,如此补丁。
答案 1 :(得分:0)
第一个片段没有正确地编译,因为正如编译器所说,你不能获取临时对象的地址,因为它会在表达式的末尾被销毁(这里:赋值)。因此,保存其地址将毫无意义。
第二个片段确实编译,但仍然不正确,但由于here所述的原因它似乎可以正常工作(至少如果你试图通过指针访问该对象)。