最近在看一个关于动态数组模板的代码。是这样的:
template<typename T>
class Dynamic1Dim
{
public:
    Dynamic1Dim();
    ~Dynamic1Dim();
    T& operator[](int index);
protected:
    bool EnlargeDim(int iSize);
public:
    T*    m_pBuf;  
    int    m_iSize;
};//--------------------------------------------------// 构造函数
Dynamic1Dim<T>::Dynamic1Dim()
{
    //数组的初始大小的1个T类型对象
    //分配一块内存其大小为T型类所占的空间    m_pBuf = (T*)malloc(sizeof(T));     //在内存空间中建立一个T型对象    new(m_pBuf) T(); 
    m_iSize    = 1;
}//--------------------------------------------------// operator [] 
T& Dynamic1Dim<T>::operator [](int index) 
{
    // 如果下标是负值,抛出一个异常    if( index < 0 ) throw std::out_of_range(" Index shouldn\\\'\\\'t be negative");     //检查下标是否超来数组大小,如果超过则调用EnlargeDim扩大数组    if(index > m_iSize - 1)
       EnlargeDim(index + 1);
    Return m_pBuf [index];
}//--------------------------------------------------// EnlargeDim
bool Dynamic1Dim<T>::EnlargeDim(int iSize) 
{    // 重新分配一块内存,其大小为扩大后T类型数组的大小    m_pBuf = (string*) realloc(m_pBuf, sizeof(T) * iSize);     // 在扩大部分的内存空间上建立T类型的数组对象,并调用其默认构造函数    for(int i = m_iSize; i < iSize; i++)
    {
       new(&m_pBuf[i]) T();
    }    m_iSize = iSize;
    return true;
}//--------------------------------------------------// Destructor
Dynamic1Dim<T>::~Dynamic1Dim()

    // 调用T类的析构函数    for(int i = 0; i < m_iSize; i++)
    {
       m_pBuf [i].~T();
    }    // 释放内存空间
    free(m_pBuf);
}其中红色的那行代码百思不得其解,往大家帮我解释一下。