假设我有一个函数foo(),它通过值
返回类A的对象A foo() {
A a(...);
return A;
}
现在在函数bar()中,我存储了一个指向A
的返回值的指针void bar() {
A* pA = &foo();
}
返回值是否会超出bar()末尾的范围,或者是否需要在pA上调用delete?
答案 0 :(得分:4)
比这更糟糕!
pA
中解除引用bar
的行为将未定义。这是因为foo()
返回一个匿名临时用户,其生命周期仅限于呼叫站点的语句。
您只有曾在使用delete
的分配结果所获得的指针上调用new
。