2013-12-10 58 views
0

假設我有一個類型爲C的指針的類型爲T *的指針的容器。如何用指針C++取消分配容器

C<T*> 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

您可以編寫自己的容器並在析構函數中進行解除分配(或使用其中一個爲您提供幫助的boost容器)。 – juanchopanza

回答

3

輔助 功能,如果您使用C++ 11,你可以使用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容器,那麼你不能做到這一點,但你可以使用一些智能指針類型,而不是原始ptr - 就像C++ 11中的boost :: scoped_ptr或std :: unique_ptr。

也助推指針容器可能會有幫助:

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