我想實現一個池類,維護一個鏈表的節點池池類拋出錯誤
儘管分配和釋放工作正常,析構函數拋出異常。
class Pool {
public:
Pool();
~Pool();
tEmployee *GetFromPool (void);
void GiveToPool (tEmployee * pNode);
void PrintPoolSize();
private:
int vTop;
tEmployee *vPool;
tEmployee *vDeleted;
};
下面是功能的實現
Pool::Pool()
:vTop (0), vDeleted (NULL)
{
vPool = new tEmployee[MAX_POOL];
}
tEmployee* Pool::GetFromPool (void)
{
if (vDeleted) {
tEmployee * temp = vDeleted;
vDeleted = vDeleted->next;
return temp;
}
if (vTop == MAX_POOL) {
vPool = new tEmployee[MAX_POOL];
vTop = 0;
}
return vPool + vTop++;
}
void Pool::GiveToPool (tEmployee * pNode)
{
pNode->next = vDeleted;
vDeleted = pNode;
}
Pool::~Pool()
{
tEmployee *curr = vDeleted;
tEmployee *next = 0;
while (curr) {
next = curr->next;
delete curr; //This line is throwing exception on the second iteration of the loop
curr = next;
}
delete [] vPool;
}
是不是由於堆損壞?
你爲什麼要實現自己的鏈表? –
要知道如何正確實現它們 –
'tEmployee'的構造函數是否將該類型的'next'指針初始化爲'NULL'? – sth