请教如何释放vector容器中的指针?

文章正文
发布时间:2025-08-18 09:44

调用clear清楚容器中的指针的时候,系统会自动释放指针所指的对象,用不着程序员操作。就你的具体问题摘了段STL源码。注释过了,应该能看懂。 void clear() { erase(begin(), end()); } iterator erase(iterator first, iterator last) { iterator i = copy(last, finish, first); destroy(i, finish); // 全局函数,销毁元素的基本函数。 finish = finish - (last - first); return first; } // 以下是 destroy() 第二版本,接受两个迭代器。 // 这里用到了traits技术,判断型别,以便用不同的方式析构对象,不了解traits略过就可以 template <class ForwardIterator> inline void destroy(ForwardIterator first, ForwardIterator last) { __destroy(first, last, value_type(first)); } // 判断元素的数值型別(value type)是否有 trivial destructor template <class ForwardIterator, class T> inline void __destroy(ForwardIterator first, ForwardIterator last, T*) { typedef typename __type_traits<T>::has_trivial_destructor trivial_destructor; __destroy_aux(first, last, trivial_destructor()); } // 如果元素的数值型別(value type)有 non-trivial destructor…对应与类,此时无法直接大块释放内存 // 当为内置数值如int等,可以直接大片释放内存来提高效率 template <class ForwardIterator> inline void __destroy_aux(ForwardIterator first, ForwardIterator last, __false_type) { for ( ; first < last; ++first) destroy(&*first); //这里是一个指针,也就是你容器中的元素 } // 以下是 destroy() 一个版本,接受一個指针。 template <class T> inline void destroy(T* pointer) { pointer->~T(); // 使用析构函数, }