在另一个类中通过引用返回一个类对象

时间:2016-09-13 08:06:05

标签: c++ oop reference

#include <stdio.h>
   class A {
     public:

      int getX() { return x; }
      private:
       int x;
};

    class B {
        public:
              A& getA () {return a;}
         private:
              A a;
     };

     int main() {
       B* b = new B;
       if(b) { 
           b->getA().setX(10);
           printf("\n Value is %p",&(b->getA()));
           b->getA().setX(5);
       }
       return 0;
     }

在上面的代码中有任何问题,并且在任何情况下getA()都可以返回NULL指针或无效指针。如果是,那么什么是有效的检查呢?

2 个答案:

答案 0 :(得分:4)

参考不能为空。测试或检查null是多余的。你的编译器已经这样做了。它只会让那些懂语言的人迷惑。

(显然这是C ++,您可以将任何值放入任何内存位置,但如果其他人操纵您的内存,则检查null的引用不会对您有所帮助。)

答案 1 :(得分:1)

您无法真正检查引用是否有效(也不能为空)。所以当你使用引用时请记住,只要你使用它们就确保对象保持有效(例如作为函数参数)。

通过引用返回对象在性能方面可能会有所帮助,但是您可以在以下情况下引入错误。你B对象被销毁,你保存了这个A&

因此,如果可能的话,请避免返回引用(除非您可以确保它引用的对象永远无效,例如全局变量),并且您必须小心它们。他们可以很难找到错误。