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

Returning a class object by reference inside another class

本文关键字:一个 对象 引用 内部 另一个 返回      更新时间:2023-10-16
#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指针或无效指针的情况。

引用不能为空。测试或检查null是多余的。你的编译器已经这样做了。这只会让懂这种语言的人感到困惑。

(显然这是c++,你可以把任何值放入任何内存位置,但是如果有人操纵你的内存,检查引用是否为null是没有用的。)

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

通过引用返回对象可能有助于提高性能,但是当您的B对象被销毁而您已经保存了这个A&时,您可能会引入错误。

因此,如果可能的话,避免返回引用(除非你可以确保它引用的对象永远不会无效,例如全局变量),如果你必须小心它们。它们会引入难以发现的bug。

相关文章: