1、相关
根据侯捷老师的STL源码解析以及SGI-STL-2.9版本实现。本文是第一篇,实现基本的构造和析构函数。所有相关的注释均在代码中注明,其中所需要的迭代器操作和萃取操作在之后实现,这里需要知道它们的用途。
2、代码
/*
* 定义了五个全局函数——construct(), destroy(),
* uninitialized_copy(),uninitialized_fill(),
* uninitialized_fill_n()中的前两个,
* 负责对象的构建和析构
*/
#ifndef CONSTRUCT_H_
#define CONSTRUCT_H_
#include<new>
#include "type_traits.h"
#include "iterator.h"
namespace MySTL {
//构造对象
//接受一个指针和一个初值,将初值设定到指针所指的空间上
template <class _T1, class _T2>
inline void construct(_T1* p, const _T2& value)
{
new (p) _T1(value); // placement new; 调用 T1::T1(value);
}
//destroy 将对象析构
/*destroy的第一个版本,第一个版本接受一个指针
***将指针所指之物析构,直接调用该对象的析构函数
*/
template<class _T>
inline void destroy(_T* pointer) {
pointer->~_T();//调用~_T();
}
/*destroy的第二个版本,第二个版本接受两个迭代器
***将两个迭代器范围内的对象析构
***这个范围可能很大,如果每个对象的析构函数都是trivial destructor