level 1
szqaly
楼主
大家看看这段代码,这是CList类中的一段代码:
template<class TYPE, class ARG_TYPE>
void CList<TYPE, ARG_TYPE>::RemoveAll()
{
ASSERT_VALID(this);
// destroy elements
CNode* pNode;
for (pNode = m_pNodeHead; pNode != NULL; pNode = pNode->pNext)
pNode->data.~TYPE();
m_nCount = 0;
m_pNodeHead = m_pNodeTail = m_pNodeFree = NULL;
m_pBlocks->FreeDataChain();
m_pBlocks = NULL;
}
template<class TYPE, class ARG_TYPE>
CList<TYPE, ARG_TYPE>::~CList()
{
RemoveAll();
ASSERT(m_nCount == 0);
}
其中有一句:
pNode->data.~TYPE();
它是调用参数类型的析构函数,按理说简单数据类型没有析构函数,运行到此处会出错才是。比如:CList<int> m_IntList;,那此处等于:pNode->data.~int();。但是一切正常,为什么? 刚学mfc。
2016年03月21日 00点03分
1
template<class TYPE, class ARG_TYPE>
void CList<TYPE, ARG_TYPE>::RemoveAll()
{
ASSERT_VALID(this);
// destroy elements
CNode* pNode;
for (pNode = m_pNodeHead; pNode != NULL; pNode = pNode->pNext)
pNode->data.~TYPE();
m_nCount = 0;
m_pNodeHead = m_pNodeTail = m_pNodeFree = NULL;
m_pBlocks->FreeDataChain();
m_pBlocks = NULL;
}
template<class TYPE, class ARG_TYPE>
CList<TYPE, ARG_TYPE>::~CList()
{
RemoveAll();
ASSERT(m_nCount == 0);
}
其中有一句:
pNode->data.~TYPE();
它是调用参数类型的析构函数,按理说简单数据类型没有析构函数,运行到此处会出错才是。比如:CList<int> m_IntList;,那此处等于:pNode->data.~int();。但是一切正常,为什么? 刚学mfc。