指针所指对象的值自己被修改了

a_1_2_ab 2014-04-11 04:09:59
定义了一个iteraor迭代器类,里面封装了了一个指针 ,重载了++操作符。

value_type& operator*(){ return *point; }
pointer operator->(){ return point; }
Iterator_base& operator++()
{
point++;
return *this;
}
Iterator_base operator++(int)
{
Iterator_base tmp=*this;
++*this;
return tmp;
}

在定义一个vector类,里面有包含迭代器的值,初始化操作后,在打印显示结果时,指针值会被自动改变
 vector(size_type n, value_type value)
{
T *p =data_container::alloc(n);
uninitialized_fill_n(p,n,value);
start.get_pointer()=p;
finish=start+n;
iterator iter=start;
end_of_range=finish;
while(iter!=finish)
{
cout<<*iter<<endl;
++iter;
}
}
就是while执行完以后,内存里的值会被自动改变。求大神指导,为什么会这样!
...全文
158 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hello_world_hust 2014-04-15
  • 打赏
  • 举报
回复
好好看看代码
a_1_2_ab 2014-04-11
  • 打赏
  • 举报
回复
调试过 ,执行++操作后,自动被改变,++就是执行的就是重载的operator++函数,没有执行其他函数
a_1_2_ab 2014-04-11
  • 打赏
  • 举报
回复
调试过 ,执行++操作后,自动被改变,++就是执行的就是重载的operator++函数,没有其他含塑化
woshinia 2014-04-11
  • 打赏
  • 举报
回复
你调试下,看看++操作进入了哪个函数就知道了
a_1_2_ab 2014-04-11
  • 打赏
  • 举报
回复
start.get_pointer()=p; 这句话就是说将指针p所指的地址赋值给start迭代器中的指针。这个没写好,破坏了封装性,不过没办法。
lixiao170 2014-04-11
  • 打赏
  • 举报
回复
引用 楼主 a_1_2_ab 的回复:
 vector(size_type n, value_type value)
        {
            T *p =data_container::alloc(n);
            uninitialized_fill_n(p,n,value);
            start.get_pointer()=p;
            finish=start+n;
            iterator iter=start;
            end_of_range=finish;
            while(iter!=finish)
            {
                cout<<*iter<<endl;
                ++iter;
            }
        }
start.get_pointer()=p;是怎么个意思
a_1_2_ab 2014-04-11
  • 打赏
  • 举报
回复
uninitialized_fill_n(p,n,value);在这函数执行完以后,打印循环打印p+i指针的值,其结果都是正确的。不知道为什么啊,调试过,发现就是因为重载++操作符的原因。但是没发现哪里写错了!。

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧