2017-06-21 128 views
1

假设我有一个函数foo(),通过价值商店指针函数的返回值

A foo() { 
    A a(...); 
    return A; 
} 

现在,在功能栏中返回A类的对象()我的指针存储到

的返回值
void bar() { 
    A* pA = &foo(); 
} 

返回值是否超出了bar()结尾处的范围,或者是否需要调用pA上的删除?

+0

***或是否有任何需要在PA上调用删除***您不会将其删除。 ***返回值是否会在bar()结束时超出范围***在此之前。你不能这样做。 – drescherjm

回答

4

这比这更糟!

bar非关联pA不确定行为。这是因为foo()会返回一个匿名临时表,其生存期限于呼叫现场的声明。

您只有有史以来调用delete上的指针,通过使用new分配的结果获得指针。

+0

非常感谢,这很清楚。 – Dooggy