求大神看下return后变量不是离开作用域了吗,如何还有效呢

求大神看下return后变量不是离开作用域了吗,怎么还有效呢?
#include <iostream>
#include <vector>
#include <memory>

using namespace std;

shared_ptr<vector<int> > new_vector()
{
return make_shared<vector<int>>();
}

int main()
{
shared_ptr<vector<int>> pv = new_vector();  //这里返回的有效吗?
if (!pv){
cout << "not enough memory " << endl;

}

return 0;
}
------解决思路----------------------
T func(...)
{
   ....
   return expr;
}

return 语句的语义是用 epxr 的值初始化一个 T 类型的临时变量 T temp = expr; ,并将 temp 作为返回值。如果 T 是一个类,通常会发生 copy 或者 move 。

你这里虽然 make_shared<vector<int>>(); 的结果在 new_vector 之外无效了,但是返回值是它的一个拷贝,所以没有问题。

(注意,如果返回值是一个引用,这么做就有问题了。)

======================
6.6.3 The return statement [stmt.return]
2 The expression or braced-init-list of a return statement is called its operand. ...... the return statement initializes the object or reference to be returned by copy initialization (8.5) from the operand.
------解决思路----------------------
return 如果返回的是函数内临时变量的指针就会有很大概率出现问题
------解决思路----------------------
返回局部对象的指针或者引用会出问题.

你这个是返回对象, 不是对象的指针或引用.

一张纸, 复印了一份给你, 再把原来的撕掉, 你手里的也还在
------解决思路----------------------
有个函数叫拷贝构造函数,自己写一个,断点跟一次就明白了