關於函數不能返回局部對象的引用或者局部對象的指針

#include<iostream>
#include<vector>
#include<string>
using namespace std;

vector<int> globalObj_one;//全局變量1
vector<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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章