Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 存储指向函数返回值的指针_C++_Pointers_Memory - Fatal编程技术网

C++ 存储指向函数返回值的指针

C++ 存储指向函数返回值的指针,c++,pointers,memory,C++,Pointers,Memory,假设我有一个函数foo(),它通过值返回类a的对象 A foo() { A a(...); return A; } 现在在function bar()中,我存储了一个指向 void bar() { A* pA = &foo(); } 返回值是否会超出bar()末尾的范围,或者是否需要在pA上调用delete?比这更糟糕 在bar中取消引用pA的行为将是未定义的。这是因为foo() 您只调用删除指针,该指针是通过使用新建分配的结果获得的,比这糟糕得多 在bar中

假设我有一个函数foo(),它通过值返回类a的对象

A foo() {
    A a(...);
    return A;
}
现在在function bar()中,我存储了一个指向

void bar() {
    A* pA = &foo();
}

返回值是否会超出bar()末尾的范围,或者是否需要在pA上调用delete?

比这更糟糕

bar
中取消引用
pA
的行为将是未定义的。这是因为
foo()


您只调用
删除
指针,该指针是通过使用
新建
分配的结果获得的,比这糟糕得多

bar
中取消引用
pA
的行为将是未定义的。这是因为
foo()


您仅对通过使用
new

分配结果获得的指针调用
delete
,或者是否需要对pA调用delete您不删除它。在此之前,返回值是否会超出bar()末尾的范围。你不能这样做。或者,如果你不删除它,是否需要在pA上调用delete。在此之前,返回值是否会超出bar()末尾的范围。你不能这么做。非常感谢,这很清楚。非常感谢,这很清楚。