#ifndef __STD_LIST_TEST__
#define __STD_LIST_TEST__
#include <list>
#include <iostream>
using namespace std;
class TestData
{
public:
TestData()
{
m_Num = 0;
}
public:
int m_Num;
};
#endif
#include "StdListTest.h"
#define NUM 10
using namespace std;
#define TESTLIST std::list<TestData*>
int main(int argc, char* argv[])
{
int m_size = 0;
std::list<TestData*> m_TestList;
for (int iTest = 0; iTest < NUM; iTest++)
{
TestData* m_test = new TestData;
m_test->m_Num = iTest;
m_TestList.push_back(m_test);
}
cout<<"刪除全部數據\n"<<endl;
// 可行方法1
//TESTLIST::iterator m_Iter = m_TestList.begin();
//while(m_Iter != m_TestList.end())
//{
// TestData* m_Temp = (m_TestList.front());
// delete m_Temp;
// m_Temp = NULL;
// m_TestList.erase(m_Iter++);
//}
// 方法2
TESTLIST::iterator m_Iter = m_TestList.begin();
while(m_Iter != m_TestList.end())
{
TestData* m_Temp = (m_TestList.front());
delete m_Temp;
m_Temp = NULL;
m_Iter = m_TestList.erase(m_Iter);
}
// 方法一和二均可行的。
// 如下有問題,因爲迭代器的指針被刪除,++時候會報錯。
/*
TESTLIST::iterator m_Iter = m_TestList.begin();
while(m_Iter != m_TestList.end())
{
m_TestList.erase(m_Iter);
//m_Iter++;//地址已被銷燬,而且存在內存泄露
}
*/
m_size = m_TestList.size();
cout<<"刪除後空間\n"<<m_size<<endl;
return 0;
}