STL中_Container_base_secure::_Myfirstiterator为什么是public
我用的是 VS2008。
看到 std::_Container_base_secure
中的 _Myfirstiterator 是public 的,表示不理解。
见以下代码
deque<int>::iterator p; //声明一个全局迭代器 pvoid dosomething(){ deque<int> myDeque; myDeque.push_back(0); //压入一个元素0 p = myDeque.begin(); cout<<*p<<endl; //输出*p,没问题 myDeque._Myfirstiter = 0; //因为_Container_base_secure::_Myfirstiter是public的, //就可以直接就可以置0,这样太不安全了吧。}int main(){ dosomething(); if(p._Has_container()) {//此句判断成功,都是myDeque._Myfirstiter = 0;惹的祸,没有把p._Mycont置0 cout<<*p<<endl; //此句很有风险,因为原来dosomething()中的myDeque内存部分已经被置为不可用了 } system("pause"); //即时上面的cout<<*p可以侥幸运行,这里的对迭代器p的析构也会出问题。}