2013-10-16 3 views
0

벡터 한 쌍 안에있는 개체의 메모리를 할당 해제하는 방법을 알고 싶습니다. 한 쌍의 벡터 안에있는 개체의 메모리 할당 해제

vector< pair<int, object*> > vectorObject; 

나는 모든 요소를 ​​반복하는 반복자를 사용하여 시도했다, 그러나 나는 한 쌍의 내부 개체를 삭제하는 방법에 대한 확신입니다.

for (vector< pair<int, object*> >::iterator it = vectorObject.begin(); it != vectorObject.end(); ++it) { 
    // delete? 
} 

는 희망 누군가가 친절하게 조언을하는 것입니다!

+0

'delete it-> second;'? – juanchopanza

답변

2

`직선 대답은 :

for (vector< pair<int, object*> >::iterator it = vectorObject.begin(); it != vectorObject.end(); ++it) { 
    delete it->second; 
} 

하지만. 당신은 아마 이것을하지 말아야합니다.
포인터를 사용하지 않는 것은 나쁜 생각입니다. std::unique_ptr을 사용하려면 벡터 유형을 변경해야합니다.

vector< pair<int, std::unique_ptr<object>>> vectorObject; 

수동으로 객체를 삭제하면 오류가 발생하기 쉬운하고 있기 때문입니다 당신은 (RAII를 uisng에 의해) 안전 하지 예외를 안전을하지 않는 한.

+0

현재 C++ 11을 사용하고 있지 않습니다. 객체 메모리를 할당 해제하는 다른 안전한 방법이 있습니까? – Todd

+0

또는 boost :: shared_ptr을 사용할 수 있습니다. –

0

그냥 수행

for (vector< pair<int, object*> >::iterator it = vectorObject.begin(); it != vectorObject.end(); ++it) { 
    delete it->second; 
} 

또는 반복자 역 참조

와 두 번째를 삭제 :

typedef pair<int, object*> mypair; 

for (vector<mypair>::iterator it = vectorObject.begin(); it != vectorObject.end(); ++it) { 
    mypair &current = *it; 
    delete current.second; 
} 
0

또한 범위 기반의 C++ 11에서 루프 사용할 수 있습니다

for (const auto& pair : vectorObject) 
    delete pair.second; 

그리고 우리는 이미 약 C++ (11)을 이야기하고 있기 때문에, 당신은뿐만 아니라 컨테이너 변경 될 수 있습니다에 :

std::vector<std::pair<int, std::unique_ptr<object>>> vectorObject; 

항상 C++ 11에서 개체 소유권을 처리하기 위해 스마트 포인터를 선호합니다.