类型萃取
类型萃取从字面意思上来说其实就是帮助我们挑选某个对象的类型,筛选特定的对象来做特定的事。
C++中的类型萃取并不是每个人都熟知,他们一般都出现在STL库底层的实现原理中,和笔者一样,相信听到这个名词的读者都好奇类型萃取到底是什么,他是用来做什么事情的?不妨让我们一探究竟
从vector增容说起
要说类型萃取,还需要从vector增容说起,我截取出一段之前笔者模拟实现vector增容的代码:
void Reserve(size_t n) {
if (n > Capicaty()) {
size_t size = Size();
T* tmp = new T[n];
if (size > 0) {
for (size_t i = 0; i < size; i++) {
tmp[i] = this->_start[i];
}
delete[] _start;
}
_start = tmp;
_finish = _start + size;
_endofstorage = _start + n;
}
}
这段代码是完全正确的,但是唯一不足的就是我们拷贝的方式统一使用了赋值的形势。之所以使用“=”赋值的形式,是因为我们在进行深拷贝,防止string类型的对象只拷贝了指针,却没考虑到内存。
这其实就是一个典型的深浅拷贝的问题,我们都知道C++的内置类型变量,例如int、shor