怎么释放vector容器中的指针
答案:1 悬赏:10
解决时间 2021-02-23 03:09
- 提问者网友:美人如花
- 2021-02-22 19:44
怎么释放vector容器中的指针
最佳答案
- 二级知识专家网友:强势废物
- 2021-02-22 20:53
调用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 destructortemplate <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();// 使用析构函数,}
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 destructortemplate <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();// 使用析构函数,}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
• 手机登qq时,显示手机磁盘不足,清理后重新登 |
• 刺客的套装怎么选啊? |