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 *ptr)
{
ptr->~T();
}
问题是,destroy(&*first)中:
first取了值又取了地址,&*first不就等于first吗;
于是我写了一小段测试代码:
//vector的头指针
std::vector<int> v;
v.push_back(1);
auto first = v.begin();
std::cout /*<< first */<< *first << " " << &*first << std::endl;
//内置int的指针
int n = 1;
int *p = &n;
std::cout << p << " " << *p << " " << &*p << std::endl;
发现vector的指针直接输出会出错,但是经过&*处理就正常输出,而vector源码中的指针用的是内置的,也就是说测试代码中的first本质应该是int指针。这是怎么回事。
Iterator只是简单包装了int*原始指针
first输出不了只是因为没有重载析取运算符
first这样解引用之后就变成了int,和first本身的类型是不同的,所以&first自然能输出