#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指针或无效指针。如果是,那么什么是有效的检查呢?
答案 0 :(得分:4)
参考不能为空。测试或检查null是多余的。你的编译器已经这样做了。它只会让那些懂语言的人迷惑。
(显然这是C ++,您可以将任何值放入任何内存位置,但如果其他人操纵您的内存,则检查null的引用不会对您有所帮助。)
答案 1 :(得分:1)
您无法真正检查引用是否有效(也不能为空)。所以当你使用引用时请记住,只要你使用它们就确保对象保持有效(例如作为函数参数)。
通过引用返回对象在性能方面可能会有所帮助,但是您可以在以下情况下引入错误。你B
对象被销毁,你保存了这个A&
。
因此,如果可能的话,请避免返回引用(除非您可以确保它引用的对象永远无效,例如全局变量),并且您必须小心它们。他们可以很难找到错误。