ReDo UnDo的好例子
一个非常好的例子 void CMyObjCollection::Add(CMyObject* pItem) { ASSERT(Find(pItem) == -1); // 不能多次加入同一对象 m_vecMyObjects.push_back(pItem); pItem->AddRef(); } void CMyObjCollection::Remove(CMyObject* pItem) { for (vector<CMyObject*>::iterator it = m_vecMyObjects.begin(); it != m_vecMyObjects.end(); it++) { if (*it == pItem) { m_vecMyObjects.erase(it); pItem->Release(); return; } } } void CMyObjCollection::RemoveAt(int index) { CMyObject* pItem = m_vecMyObjects[index]; m_vecMyObjects.erase(m_vecMyObjects.begin() + index); pItem->Release(); } void CMyObjCollection::Clear() { for (int i = 0; i < m_vecMyObjects.size(); i++) m_vecMyObjects[i]->Release(); m_vecMyObjects.erase(m_vecMyObjects.begin(), m_vecMyObjects.end()); } bool CMyObjCollection::Contains(CMyObject* pItem) { return (Find(pItem) != -1); } int CMyObjCollection::Find(CMyObject* pItem) { for (int i = 0; i < m_vecMyObjects.size(); i++) { if (m_vecMyObjects[i] == pItem) return i; } return -1; }