2013-12-10 4 views
0

T * 유형의 포인터가있는 C 유형의 컨테이너가 있다고 가정합니다. 내가 제대로 당신이 C++ 11을 사용하는 경우포인터를 사용하여 컨테이너를 할당 해제하는 방법 C++

template<class C> 
void delete_all(C& c) { 
    typename C::iterator next(c.begin()), last(c.end()); 
    while (next != last) { 
     delete(*next); 
     ++next; 
    } 
} 
+1

당신은 할 수 없습니다. (이것을 채우자.) – RedX

+1

당신은 자신 만의 컨테이너를 작성하고 소멸자에서 할당 해제를 할 수있다. (또는 당신을 위해 부스트 컨테이너를 사용한다.) – juanchopanza

답변

3

같은 보조 기능을 사용하지 않고이 컨테이너 할당을 해제 할 수있는 방법

C<T*> c; 

대신 C<std::unique_ptr<T>> c을 사용할 수 있습니다. Pre-C++ 11 C<std::auto_ptr<T>>을 시도해 볼 수 있습니다.

1

C 템플릿을 전문화 할 수 있다면 포인터 전문화 소멸자에 코드를 넣을 수 있습니다.

template<> class C<T*> { 
    //... 

    C<T*>::~C() { 
     // clean up 
    } 
} 

그러나 그렇다면 수용소의 수명에 대해 조금 걱정할 필요가 있습니다.

STL 컨테이너를 의미하는 경우이 작업을 수행 할 수 없지만 C++ 11에서는 boost :: scoped_ptr 또는 std :: unique_ptr과 같이 원시 ptr 대신 스마트 포인터 유형을 사용할 수 있습니다.

또한 포인터 컨테이너 도움이 될 부스트 :

http://www.boost.org/doc/libs/1_55_0/libs/ptr_container/doc/ptr_container.html

관련 문제