关于临时对象的一些讨论


所谓临时对象,想必很多学编程语言的人都会很有感受,这些临时对象有时候让你觉得不可思议,有时候又让你觉得十分的痛恨,这些临时对象如果不在自己的预期之内,将会造成效率上面的一些负担,例如常常见到的pass by value就会引发copy操作,形成一个临时对象。

临时对象的定义,其实很简单,就是一种无名对象(unnamed objects).

有些时候我们需要这些临时对象,这里就会产生质疑,临时对象怎么产生,当然,回答很确定,临时对象的制造方法是:在型别名称之后直接加一对小括号,并且制定初值。例如int(10),它的意义就相当于调用相应的构造函数并且不指定对象的名称。

在标准模板库中,这种制造临时对象的方法最最常见的就是用在仿函数上面,下面给出一段代码,在VC6.0下进行编译通过并执行...


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

template<class T>
class PRINT
{
public:
	void operator()(const T& elem)
	{
		cout<<elem<<endl;
	}
};

void main()
{
	int ia[5]={1,2,3,4,5};
	vector<int> iv(ia, ia+5);
	PRINT<int>  it;

	for_each(iv.begin(), iv.end(), PRINT<int>());
	for_each(iv.begin(), iv.end(), it);
}

PRINT<int>()这个临时对象传入for_each()之中并在其中起作用,当这个函数结束时,这个临时对象的生命期也就到头了..

当然有些人看到for_each()这个函数定会有有些迷惑,这个函数做了什么,下面是它的源码,抠出来看看我想不用做过多的解释大家就会明白。

template<class _II, class _Fn> inline
_Fn for_each(_II _F, _II _L, _Fn _Op)
{
	for(; _F != _L; ++_F)
	{
		_Op(*_F);
	}
	return (_Op);
}
for_each()函数依次打印iv中的元素....


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值