for_each为何不能直接用delete?该如何解决

for_each为何不能直接用delete?
in   think   in   c++   2   volume.

下面的a是一个容器,里面转的是指针。

template   <class   T>
void   wipe(T*   x)   {   delete   x;   }

for_each(a.begin(),   a.end(),   wipe <Counted> );

是合法的,但

for_each(a.begin(),   a.end(),   ptr_fun(operator   delete));

却有bug。
据书上说是delete接受void*,但iterator不是指针,所以不会调用析构函数。
但是for_each   在调用函数时已经将iterator解引用了,怎么会和iterator有关呢
书上也没说的十分清楚,希望那位高手指点一下

------解决方案--------------------
delete x; 不等于 operator delete (x);
------解决方案--------------------
正如 Wolf0403(废人:地球这么大,何处是我家) 所说:
delete operator // a)
operator delete // b)
是不同的.

1.
int * pi = new int();
delete pi;
这里的 delete 是说的上诉 a). 它是 C++ 语言规定的.

2. a) 实行两部分工作. 第一, 调用要清理对象的析构器. 第二, 调用 b) 进行内存的回收.

3. b) 基本上可以类比 C 库中的 free 函数. 事实上, 它是标准库中定义的方法(我说 operator delete 是方法会挨骂吗?). 它的原型大致如下:
void operator(void *);

4. 因此, 你使用 operator delete, 首先一定不会调用 destructor 了.

5. 关于 iterator, 在 for_each 中的确 dereference 了. 那么请看(显意啊, 不正规).
vector <int> ::iterator it = a.begin();
operator delete(*it);
你觉得合适吗? *it 不能转换成 void * 吧.
所以, 真的要这么干, 也要想办法如此:
operator delete(&*it);
显然, 这么一搞, 你的 function object 要重新设计了.


------解决方案--------------------
destory是STL里的辅助函数,可见于《STL源码剖析》P51