Temporary Objects

string FindAddr(list<Employee> emps, string name) // const &, string& dangerous.
{
	// for most containers, calling end() returns a temporary object that must be constructed and detroyed.
	for(list<Employee>::iterator i = emps.begin(); i != emps.end(); i++)// emps.end(). i++
	{
		if( *i == name ) // implicit conversions. string to Employee?
		{
			return i->addr;
		}
	}
	return "";
}

const T T::operator++(int)
{
	T old(*this);
	++*this;
	return old;
}


const string& FindAddr( /* pass emps and name by reference */ )
{
	for( /* ... */ )
	{
		if( i->name == name )
		{
			return i->addr;
		}
	}
	static const string empty;
	return empty;
}

string& a = FindAddr(emps, "John Doe"); 
emps.clear();  // if emps is cleared. then, it not exist. and a is null.
cout << a; // error

string FindAddr(const list<Employee>& emps, const string& name) 
{
	list<Empoyee>::const_iterator iend(emps.end());
	for(list<Employee>::const_iterator i = emps.begin(); i != iend; ++i)
	{
		if(*i->name == name) // implicit conversions. string to Employee?
		{
			return i->addr;
		}
	}
	return "";
}

string FindAddr(const list<Employee>& emps, const string& name)
{
	list<Empoyee>::const_iterator i(find(emps.begin(), emps.end(), name));
	if (i != emps.end())
	{
		return i->addr;
	}

	return "";
}


發佈了42 篇原創文章 · 獲贊 0 · 訪問量 8603
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章