在另一个类内部通过引用返回一个类对象
Returning a class object by reference inside another class
#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。
相关文章:
- 为什么我不能将一个对象push_back到属于另一个类的对象向量中?
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- 从多个源构造一个对象,包括一个对象向量
- 为什么C++在将一个对象复制到另一个对象时需要对这两个对象进行低级常量限定
- 检查哪个对象调用了另一个对象的对象方法
- C++ 如何在将新对象分配给另一个对象时创建新对象
- 如何处理从一个对象传递到另一个在C++中具有公共抽象类的对象的消息
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 包装一个对象并假装它是一个 int
- 为什么我可以在不重载 "=" 运算符的情况下将一个对象分配给另一个对象?
- 如何在qt中将信号和插槽与另一个对象连接 --解决了
- 如何使用函数将一个对象的输入复制到另一个对象中
- 选择一个元素而不是一个对象的数组的原因
- 为什么我可以使用 memcpy 将一个对象变量复制到另一个对象变量
- 如何将包含另一个对象向量的对象保存到文件中,并使用C++中的二进制文件从文件中读回?
- 我重载了 << 和 = 运算符。为什么当我将一个对象分配给另一个对象并尝试打印它时,我会被打印出来?
- 打印对象的映射,其中另一个对象作为键
- 如何通过另一个对象中的命令正确地从一个对象返回数据
- 为什么将两个对象分配给另一个对象后,两个对象不一样?
- 绘制一个对象,比较模具缓冲区的两个不同值