c ++获取临时对象的地址

时间:2015-05-04 14:33:54

标签: c++

我有两个代码段,我期望得到相同的结果:

第一个:

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(...);
}

为什么我在尝试构建第一个代码段时遇到“获取临时对象的地址”错误,而第二个代码段没有产生错误?

2 个答案:

答案 0 :(得分:0)

第一个示例没有编译,因为somefunc返回一个值,并且您尝试获取它返回的此临时事物的地址。这可行:

Someclass* p;
Someclass  val = somefunc (...);
p = &val;

第二个例子不编译 - 或者不应该 - 因为somefunc应该返回Someclass,而是返回指向Someclass的指针。让它返回Someclass *然后它应该编译 - 但现在你返回一个指向局部变量的指针,在你离开函数后它不再存在。最好的解决方案是第一个例子,如此补丁。

答案 1 :(得分:0)

第一个片段没有正确地编译,因为正如编译器所说,你不能获取临时对象的地址,因为它会在表达式的末尾被销毁(这里:赋值)。因此,保存其地址将毫无意义。

第二个片段确实编译,但仍然不正确,但由于here所述的原因它似乎可以正常工作(至少如果你试图通过指针访问该对象)。