Удалить участника из списка во время функции удаления участника ⇐ C++
Удалить участника из списка во время функции удаления участника
У меня есть объект-контейнер с некоторыми членами (например, вектор), и мне нужно удалить этот элемент из списка. Но мне нужно сделать это с помощью функции стирания члена. Ниже приведен пример. Эта система приводит к тому, что программа в один момент возвращается к функции несуществующего объекта. Это правильный путь? Не может ли это вызвать неожиданное поведение программы?
с использованием пространства имен std; класс CCont; класс CMember { публика: интервал m_iIndex; CString m_csName; CCont *m_pParent; CMember(CCont *pParent, CString csName, int iIndex); bool Стереть(); //возвращаем true, если стирание прошло успешно }; класс CCont: защищенный вектор { публика: //Добавляем участника в список void AddMember (CString csName, int iIndex) { CMember *pMem = новый CMember(this, csName, iIndex); push_back (pMem); } //находим элемент в списке по индексу/называем указатель возврата CMember *FindMember(int iIndex) const { for(auto memb: *this) if(memb->m_iIndex == iIndex) вернуть члена; вернуть НУЛЬ; } CMember *FindMember(LPCTSTR lsName) const { for(auto memb: *this) if(memb->m_csName == lsName) вернуть члена; вернуть НУЛЬ; } bool EraseMemb(CMember *pMemb) { итератор это; for(it = start(); it != end(); ++it) если (* это == pMemb) перерыв; если (оно == конец()) вернуть ложь; удали это; стереть его); вернуть истину; } }; интервал основной() { CCont cCont; cCont.AddMember(L"Смит", 1); cCont.AddMember(L"Новак", 3); cCont.AddMember(L"Джонни", 4); CMember *pSmith = cCont.FindMember(L"Смит"); если (пСмит) пСмит->Стереть(); //pSimth теперь является указателем на несуществующий объект, но я больше не буду использовать pSmith интервал отладки = 0; вернуть 0; } //--------выполнение---------- CMember::CMember(CCont *pParent, CString csName, int iIndex) : m_pParent(pParent), m_csName(csName), m_iIndex(iIndex) {} bool CMember::Erase() { вернуть m_pParent->EraseMemb(это); //здесь я возвращаюсь к функции несуществующего объекта }
У меня есть объект-контейнер с некоторыми членами (например, вектор), и мне нужно удалить этот элемент из списка. Но мне нужно сделать это с помощью функции стирания члена. Ниже приведен пример. Эта система приводит к тому, что программа в один момент возвращается к функции несуществующего объекта. Это правильный путь? Не может ли это вызвать неожиданное поведение программы?
с использованием пространства имен std; класс CCont; класс CMember { публика: интервал m_iIndex; CString m_csName; CCont *m_pParent; CMember(CCont *pParent, CString csName, int iIndex); bool Стереть(); //возвращаем true, если стирание прошло успешно }; класс CCont: защищенный вектор { публика: //Добавляем участника в список void AddMember (CString csName, int iIndex) { CMember *pMem = новый CMember(this, csName, iIndex); push_back (pMem); } //находим элемент в списке по индексу/называем указатель возврата CMember *FindMember(int iIndex) const { for(auto memb: *this) if(memb->m_iIndex == iIndex) вернуть члена; вернуть НУЛЬ; } CMember *FindMember(LPCTSTR lsName) const { for(auto memb: *this) if(memb->m_csName == lsName) вернуть члена; вернуть НУЛЬ; } bool EraseMemb(CMember *pMemb) { итератор это; for(it = start(); it != end(); ++it) если (* это == pMemb) перерыв; если (оно == конец()) вернуть ложь; удали это; стереть его); вернуть истину; } }; интервал основной() { CCont cCont; cCont.AddMember(L"Смит", 1); cCont.AddMember(L"Новак", 3); cCont.AddMember(L"Джонни", 4); CMember *pSmith = cCont.FindMember(L"Смит"); если (пСмит) пСмит->Стереть(); //pSimth теперь является указателем на несуществующий объект, но я больше не буду использовать pSmith интервал отладки = 0; вернуть 0; } //--------выполнение---------- CMember::CMember(CCont *pParent, CString csName, int iIndex) : m_pParent(pParent), m_csName(csName), m_iIndex(iIndex) {} bool CMember::Erase() { вернуть m_pParent->EraseMemb(это); //здесь я возвращаюсь к функции несуществующего объекта }
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение