Chinaunix首页 | 论坛 | 博客
  • 博客访问: 142013
  • 博文数量: 20
  • 博客积分: 295
  • 博客等级: 上士
  • 技术积分: 232
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-24 23:09
文章分类

全部博文(20)

文章存档

2012年(2)

2011年(10)

2010年(8)

我的朋友

分类: C/C++

2011-10-13 18:31:32

  1. //<stl_construct.h>的部分内容

  2. #include <new.h>

  3. template <typename T1,typename T2>
  4. inline void construct (T1 *p, const T2& value)
  5. {
  6.   new(p) T1(value);//调用T1::T1(value);
  7. }

  8. template <typename T>
  9. inline void destroy (T * pointer)
  10. {
  11.   pointer->~T();//调用~T();最终都调用这个版本的.
  12. }

  13. template <typename ForwardIterator>
  14. inline void destory (ForwardIterator first, ForwardIterator last)
  15. {
  16.   _destroy(first, last, value_type(first)); //调用_destroy,还传进元素的类型
  17. }

  18. template <typename ForwardIterator,typename T>
  19. inline _destroy(ForwardIterator first, ForwardIterator last, T*)
  20. {
  21.   typedef typename _type_trait<T>::has_trivial_destructor trivial_destructor;
  22.   _destroy_aux(first,last,trivial_destructor());//调用_destory_aux,判断是否有trivial destructor
  23. }//trivial destructor 语义可以看Inside The C++ Object Model

  24. template <typename ForwardIterator>
  25. inline void _destory_aux (ForwardIterator first, ForwardIterator last, _true_type)
  26. {
  27.   //如果有 trivial destructor 就什么也不做.
  28. }

  29. template <typename ForwardIterator>// 没有trivial destructor,逐个destroy
  30. inline void _destory_aux (ForwardIterator first, ForwardIterator last, _false_type)
  31. {
  32.    for ( ;first < last; ++first)
  33.       destroy(&*first);
  34. }

  35. inline void destroy( char* ,char *) {}//对char跟wchar_t的特化版
  36. inline void destroy(wchar_t *,wchar_t *){}
//知道有这玩意之后就不会在CSDN看着他们争那题会不会内存泄漏了,虽然标准说行为未定义.但是真的实现怎么实现的后//就能对自己写的代码的行为有更加好的掌控,

阅读(1660) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~