取消引用指针,然后取消引用的地址

时间:2014-08-10 02:26:28

标签: c++ pointers

我读了STL,指针的用法让我很困惑。

destroy(&*first);

首先是一个指针,然后“& * first”等于第一个,为什么不直接使用? destroy声明如下:

void destroy(T* pointer)

T是模板参数。

2 个答案:

答案 0 :(得分:7)

这很可能是由于运营商超载造成的。 first是通常赋予迭代器的名称,它重载operator*以返回对容器的指向元素的引用,然后operator&用于获取迭代器所在的变量的地址指向。您可以阅读有关迭代器here的更多信息。

但是,如果first是指针而不是用户定义的迭代器,那么您可以直接使用first。请注意,指针可以是迭代器(具体来说,RandomAccessIterator s)。

答案 1 :(得分:3)

如果参数已经是原始指针,那么&*组合什么都不做,正如您已经注意到的那样。但是,如果参数是具有重载的一元*运算符的类类型,则&*不再是无操作。

&*模式的经典用法是转换"泛型"指针指向原始指针。例如,如果it是与向量元素关联的迭代器,则&*it将为您提供指向该向量元素的普通原始指针。