{
cout<<" constructor DataItem"<
text=item.text;
//*this=item;//这句的作用等同于上面两句,但是它会调用operator= ,就多了一次方法调用
}
const DataItem& operator=(const DataItem& item)
{
cout<<" operator= DataItem"<
value=item.value;
return *this;
}
DataItem* operator&()
{
return this;
}
const DataItem* operator&()const
{
return this;
}
int GetValue()
{
return value;
}
void SetValue(int val)
{
value=val;
}
string& GetText()
{
return *text;
}
void SetText(string* txt)
{
text=txt;
}
private :
int value;
string* text;
};
两个对比方法及测试代码:
DataItem getDataItemByValue(DataItem item)
{
return item;
}
const DataItem& getDataItemByReference(const DataItem& item)
{
return item;
}
void TestDataItem()
{
DataItem item;
cout<<"getDataItemByValue start:"<
cout<<"getDataItemByValue end"<
cout<<"getDataItemByReference end"<
结果截图:
从结果中我们看到pass-by-value多调用两次构造函数,两次析构函数,还有对象的数据成员的构造和析构,损失的确是很惨重。