读书人

成员函数摘引与非引用的区别。

发布时间: 2012-08-13 13:21:53 作者: rapoo

成员函数引用与非引用的区别。。
我编写了一个类,私有成员为四个类型的指针 容器,有四个成员函数是调用这些容器

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楼的解释都很到位。

读书人网 >C++

热点推荐