关于函数不能返回局部对象的引用或者局部对象的指针

来源:互联网 发布:html5手机端模板 知乎 编辑:程序博客网 时间:2024/06/07 22:08
#include<iostream>#include<vector>#include<string>using namespace std;vector<int> globalObj_one;//全局变量1vector<int> *globalObj_two = new vector<int>();vector<int> fun1(){vector<int> funObj_one;vector<int> *funObj_two = new vector<int>();for(int i = 0;i<10;++i){funObj_one.push_back(i);funObj_two->push_back(i);}return funObj_one;//返回局部对象的拷贝}vector<int>& fun2()//返回局部对象的引用{vector<int> funObj_one;vector<int> *funObj_two = new vector<int>();for(int i = 0;i<10;++i){funObj_one.push_back(i);funObj_two->push_back(i);}return funObj_one;}vector<int>* fun3(){vector<int> funObj_one;vector<int> *funObj_two = new vector<int>();for(int i = 0;i<10;++i){funObj_one.push_back(i);funObj_two->push_back(i);}return funObj_two;//返回堆对象指针}vector<int>* fun4(){vector<int> funObj_one;vector<int> *funObj_two = NULL;for(int i = 0;i<10;++i){funObj_one.push_back(i);}funObj_two = &funObj_one;//指针指向一个局部对象return funObj_two;//返回局部对象指针}int main(){vector<int> mainObj_one;vector<int> mainObj_two;vector<int> *mainObj_three = NULL;vector<int> *mainObj_four = NULL;mainObj_one = fun1();//返回局部对象的拷贝(正常)for(auto iter = mainObj_one.begin();iter!=mainObj_one.end();++iter)cout<<*iter<<' ';cout<<endl;mainObj_three = fun3();//返回堆对象的指针(正常)for(auto iter = mainObj_three->begin();iter!=mainObj_three->end();++iter)cout<<*iter<<' ';cout<<endl;mainObj_two = fun2();//返回局部对象的引用(无法打印,对象已被析构)for(auto iter = mainObj_two.begin();iter!=mainObj_two.end();++iter)cout<<*iter<<' ';cout<<endl;mainObj_four = fun4();//返回局部对象的指针(无法打印,对象已被析构,指针指向不存在的对象,并且程序运行出错)for(auto iter = mainObj_four->begin();iter!=mainObj_four->end();++iter)cout<<*iter<<' ';cout<<endl;return 0;}

阅读全文
0 0
原创粉丝点击