求指导几个模板类的有关问题

求指导几个模板类的问题
本帖最后由 MusVision 于 2015-01-19 14:24:27 编辑
最近在学习C++模板的用法,通过看一些VC里面的代码学习,看到CArray中有几处不是很明白,想请教大家。
不懂的地方我在下面代码中标出,还请不吝赐教。

template<typename TYPE, class ARG_TYPE = const TYPE&> 
//这里为什么会需要两个模板参数?什么情况下
//需要两个模板参数?通过代码测试,第二个参数应该是默认
//等于第一个,想问下= const TYPE&这句是个什么写法?
class CArray : public CObject
{
public:
// Construction
CArray();

}


CArray<TYPE, ARG_TYPE>::~CArray()
{
ASSERT_VALID(this);
if (m_pData != NULL)
{
for( int i = 0; i < m_nSize; i++ )
(m_pData + i)->~TYPE();     //这句是什么意思?调用的是哪个函数?
delete[] (BYTE*)m_pData;
}
}

------解决思路----------------------
第一个问题,你可以看成这样template<typename TYPE, class ARG_TYPE>  ,只不过第二个参数的默认类型为const TYPE&(TYPE引用类型,所以这个参数可以不填,也可以填)。
第二个问题,(m_pData + i)->~TYPE(); TYPE应该是一个类类型,~TYPE()为类的析构,(m_pData + i)->~TYPE()也就是调用数组中第i个元素的析构。
------解决思路----------------------
标准允许这么写(~int()不行,但是template以后~TYPE() with TYPE=int是可以的),设计目标就是为了写这类代码不用对内置类型特殊处理。