成员函数摘引与非引用的区别。
成员函数引用与非引用的区别。。
我编写了一个类,私有成员为四个类型的指针 容器,有四个成员函数是调用这些容器
好了。。
再定义 这个类的一个 实例 X
当我用 iterator 迭代器
运行到这一句,程序崩了,提示信息Expression: vector iterator incompatible.. 迭代器矛盾 - -!.
然后把成员函数改成引用
一切就OK了。。
求大神 解释!!!!!!!!!!!!!!!!!!!!!!!!!!!
------解决方案--------------------
非引用函数返回的是一个副本。这点要明白。下面分析:
iterator it =X.GetTT1().begin();这时候假设X.GetTT1返回的是一个临时对象A。而你的迭代器指向了A的开始。
it !=X.GetTT1().end()这时候X.GetTT1返回的临时对象B,你把A的迭代器和B的迭代器进行比较。崩溃了......
而返回的引用的问题是:返回的都是同一个。明白没??
------解决方案--------------------
1、2楼的解释都很到位。
我编写了一个类,私有成员为四个类型的指针 容器,有四个成员函数是调用这些容器
- C/C++ code
pubic: //构造函数其他神马的略 vector <T1 *> GetTT1() {return TT1;} vector <T2 *> GetTT2() {return TT2;} vector <T3 *> GetTT3() {return TT3;} vector <T4 *> GetTT4() {return TT4;} private: vector <T1 *> TT1; vector <T2 *> TT2; vector <T3 *> TT3; vector <T4 *> TT4;
好了。。
再定义 这个类的一个 实例 X
当我用 iterator 迭代器
- C/C++ code
for(vector<T1 *>::iterator it =X.GetTT1().begin(); it !=X.GetTT1().end();++it
运行到这一句,程序崩了,提示信息Expression: vector iterator incompatible.. 迭代器矛盾 - -!.
然后把成员函数改成引用
- C/C++ code
vector <T1 *> &GetTT1() {return TT1;} vector <T2 *> &GetTT2() {return TT2;} vector <T3 *> &GetTT3() {return TT3;} vector <T4 *> &GetTT4() {return TT4;}
一切就OK了。。
求大神 解释!!!!!!!!!!!!!!!!!!!!!!!!!!!
------解决方案--------------------
非引用函数返回的是一个副本。这点要明白。下面分析:
iterator it =X.GetTT1().begin();这时候假设X.GetTT1返回的是一个临时对象A。而你的迭代器指向了A的开始。
it !=X.GetTT1().end()这时候X.GetTT1返回的临时对象B,你把A的迭代器和B的迭代器进行比较。崩溃了......
而返回的引用的问题是:返回的都是同一个。明白没??
------解决方案--------------------
1、2楼的解释都很到位。