指针的1点疑惑-解引用再取地址

指针的一点疑惑--解引用再取地址?
在STL中看到的一行代码
destroy(&*first);
其中first是指针。为什么是先解引用,再取地址?
destrpy函数声明:void destroy(T* pointer)
含有模板。first是指针类型,模板传递的指针类型,难道是用了模板的原因?

------解决方案--------------------
这是为了应该迭代器的情况,iterator是一个类指针,但它并不是真正的指针,它指向的数据被包在里面。需要用*iterator得到数控,然后再&取得数据的真正指针
------解决方案--------------------
first 不一定是指针,有可能是类对象,重载了 operator*。