내 C++ 프로그램에서 new를 사용하여 하나의 함수로 개체를 만듭니다. 이러한 개체는 집합에 삽입됩니다. 집합에서 객체를 제거하려면 for-loop에서 반복자를 사용합니다. 집합에서 개체를 제거 할 때 개체를 삭제하여 메모리를 확보해야합니다. 맞습니까? delete를 사용하여 시도했지만, 해제 된 포인터가 할당되지 않았다는 오류가 발생합니다. 그러면 어떻게 할 수 있습니까? 여기 집합의 개체를 삭제하는 방법
내가 다음 개체를 생성하고 코드가 다른 함수에서 설정set <myObject> myobjectlist;
myObject *myobject = new myObject;
myobjectlist.insert(*myobject);
에 삽입, 내가 설정에서 개체를 제거하려고, 무료 메모리 :
for (set<myObject>::iterator i = myobjectlist.begin(); i != myobjectlist.end(); i++)
if (i->myObjectID == myObjectID)
{
myobjectlist.erase(*i);
delete &i;
break;
}
'삭제'부분이 없으면 정상적으로 작동합니다. 객체의 메모리가 해제되지 않았다고 생각해서 추가했습니다.
코드 스 니펫을 기반으로 할 때이 문장은 오해의 소지가 있습니다. 그의 세트는 객체를 값으로 저장하기 때문에 지우는 것은 새로운 것으로 할당 한 것이 아닙니다. – hifier
아니요, 그가 참조로 삭제하고 있기 때문에 그렇지 않습니다. 그의 세트에는 원래의 물체 가치의 사본이 포함되어 있습니다. 값은 집합에서 지워지고 소멸되며 반복자는 삭제하려고 시도합니다. 더 이상 유효한 블록을 가리 키지 않으므로 작동하지 않습니다. –
그의 코드는 반복자를 지우려고 시도하지 않고 iterator의 _address_를 삭제하려고 시도합니다 (새 주소로 할당 된 포인터에 대한 포인터를 보유하고 있지 않은 유효한 주소 임). 그러나 이것은 요점이 아니며, 코드는 원래 객체를 누설합니다. – hifier